SQL语句不仅会写,还要高质量!
1,要养成用 explain 分析写的 SQL的习惯,尤其关注走不走索引:explain select * from AAA where id =10 or age =18;
2,查看表结构:show create table AAA;
3,为表添加分区:alter table AAA add partition(parttion P_AAA_20200329 values less than(20200329) ENGINE =InnoDB);
需要注意分区只能往后加,如果你加到2019年,那是会报错的。
4,查询 SQL 尽量不要使用 select *(所有字段,系统内存消耗大),而是 select 具体字段,节省资源、减少网络开销。
5,如果知道查询结果只有一条或者只要最大/最小一条记录,建议用 limit 1,找到对应一条记录,就不会继续向下扫描,效率提高。
6,应尽量避免在 where 子句中使用 or 来连接条件,MySQL 优化器,遇到 or 条件,索引可能失效。
7,like 很可能让索引失效。看好%位置。
8,索引列上使用内置函数,索引可能失效。
9,避免在 where 子句中对字段进行表达式操作,导致索引可能失效。
10,Inner join 、left join、right join,优先使用 Inner join,如果是 left join,左边结果尽量小。Inner join 内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集。left join 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。right join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
11,应尽量不要在 where 子句中使用!=或<>操作符,可能会让索引失效
12, where 及 order by 涉及的列尽量选择主键索引
13,慎用 distinct 关键字,因为查询很多字段时,使用 distinct,引擎对数据进行比较,过滤掉重复数据,这个比较、过滤的过程会占用系统资源,CPU 。
14,一次删除大量数据,可能会有 lock wait timeout exceed 的错误,建议分批操作。
15,不要有超过 5 个以上的表连接,连表越多,编译时间和开销也就越大。把连接表拆开成较小的几个执行,可读性更高。
16,数据库最费劲的就是跟程序链接释放。假设链接了两次,每次做上百万次的数据集查询,查完就走,这样就只做了两次;相反建立了上百万次链接,申请链接释放反复重复,这样系统就受不了了。 MySQL 优化原则,就是小表驱动大表,小的数据集驱动大的数据集,从而让性能更优。最外层循环小的,适合使用 in,否则适合选择 exist。
17,检索结果中不会有重复的记录,推荐 union all 替换 union。
18,索引不宜太多,一般 5 个以内,索引并不是越多越好,索引虽然提高了查询的效率,但是也降低了插入和更新的效率。
19,尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,相对于数字型字段,字符型会降低查询和连接的性能,并会增加存储开销。
20,索引不应建在有大量重复数据的字段上,如性别这类型数据库字段,MySQL 查询优化器推算发现不走索引的成本更低,很可能就放弃索引了。
21,尽量避免向客户端返回过多数据量,尽量减小结果集,否则可能系统变慢。
22,多表关联时,使用表的别名,并把别名前缀于每一列上,这样语义更加清晰:select A.name,B.deptName from A member inner join B deptment on A.deptId = B.deptId;
23,为了提高 group by 语句的效率,可以在执行到该语句前,把不需要的记录过滤掉,having中的条件可以移到where条件中。
24,字段类型是字符串,where要用引号括起来,即使知道是数字,否则索引失效,类型不匹配,MySQL 会做隐式的类型转换,把它们转换为浮点数再做比较。反例:select * from AAA where id =123;正例:select * from AAA where id ='123';
每天强制自己写些东西,拍摄制作视频,记录生活,思考探索学习一些东西。不断地学习,坚持下去,提高自己的认知,打开自己的思维,以后会有更多的方法和创新。
版权归作者老有理所有,未经作者允许不得转载本文内容,否则将视为侵权;转载或者引用本文内容请注明来源及原作者;对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权。欢迎大家对内容给予批评指正,请在下面留言,我会一一回答,谢谢大家的支持关照。认可的点赞支持!喜欢的话就点击关注!!