本文主要介绍了SQL优化的N种方法,通过示例代码进行了非常详细的介绍。对大家的学习或工作都有一定的参考价值。有需要的朋友下面和边肖一起学习。
1.SQL语句中IN包含的值不应过多:
例如:select id from someone number in(1,2,3)。对于连续值,请使用between而不是in。
2.SELECT语句务必指明字段名称:
不要用*来查询,不要用*来查询,不要用*来查询,重要的事情说三遍,要找的具体字段写在哪个字段。
3.只查询一条数据的时候,使用limit 1
[这很有用]
4.避免在where子句中对字段进行null值判断
5.避免在where子句中对字段进行表达式操作:
从用户中选择id,其中id * 100=500
上述sql对字段执行算术运算,这将导致引擎放弃使用索引。建议改为:
从id=500/100的用户中选择id;
6.对于联合索引来说,要遵守最左前缀法则:
例如,当使用组合索引(id,name,sex)时,它可以是id或id,name。禁用直接名称或性别将导致联邦索引失败。
注意:ID、姓名、性别的填充顺序不会影响,mysql会自动优化到最左边的匹配顺序。
前三条sql可以命中索引,中间两条不符合最左匹配原则。
最后一个sql具有最左边的索引id,因此该索引部分成功,部分无效。id字段索引已成功使用。
解释select * from `user _ test '其中uid=10
解释select * from` user _ test `其中uid=10,name=' know the time
解释select * from` user _ test `其中uid=10,name=' know the time '和phone=' 13047967256
解释select * from ` user _ test ` where name=' know the time ' and phone=' 13047967256 ';
解释select * from ` user _ test ` where name=' know the time ';
解释select * from `user_test `其中uid=10,phone=' 13047967256
7.尽量使用inner join,避免left join:
如果连接方式是inner join,MySQL会自动选择一个小表作为驱动表,不需要其他过滤条件,但是left join遵循左侧驱动右侧的原则,即left join左侧的表名就是驱动表。
8.注意范围查询语句:
对于联合索引,如果存在范围查询,如、等,以下索引字段将无效。
解决方案:在业务允许的情况下,使用=或=以免影响索引的使用。
9.不建议使用%前缀模糊查询:
比如像“%name”或者像“%name%”,这种查询会导致索引失效和全表扫描。但是你可以用“姓名%”。
10.在 where 子句中使用 or 来连接条件,如果or连接的条件有一方没有索引,将导致引擎放弃使用索引而进行全表扫描
解决方法:索引or连接的两端,就可以使用了。
11.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
12.字符串类型的字段 查询的时候如果不加引号’’ ,会导致自动进行隐式转换,然后索引失效
关于SQL优化的N种方法(总结)这篇文章到此为止。更多相关SQL优化内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。