vlambda博客
学习文章列表

你必须知道的九条MySQL优化技巧

9条MySQL

优化技巧




1:如果明确知道仅有一条查询结果,请使用“LIMIT 1”


原因:当使用“LIMIT 1”进行查询时,可有效避免进行全表扫描,找到相应的结果即停止扫描。




2:超过三表禁止jion


原因:这也是阿里巴巴Java开发手册中规定的,超过三表将大大影响SQL查询的性能,影响用户体验。如果确实需要多表查询,尽量在Java代码层面完成。




3:在允许结果集重复的情况下,尽量使用UNION ALL替代UNION


原因:因为UNION会去重的缘故,UNION ALL不会去重,所以效率上要比UNION高。




4:无特殊情况,禁止使用“SELECT *”


原因:使用“SELECT *”将会进行全局扫描,当数据量过大时,将加大服务器的负担,影响性能,甚至会影响服务器与客户端直接的网络开销。




5:不要使用where子句对字段进行null值判断


原因:当where子句对null进行判断的时候会导致引擎放弃使用索引从而对全局进行扫描,影响性能。




6:尽量使用“BETWEEN”替代“IN”


原因:IN后面的全部常量在MySQL中是存放在一个数组中的,如果数值较多,产生的消耗就越大,所以相对于连续的数值,能使用BETWEEN就不要使用IN。




7:尽量避免null字段,定义时尽量使用 not null


原因:当字段为null时,不方便进行查询优化,同时复合索引也会失效。




8:区分IN和EXISTS


原因:IN和EXISTS主要区别在于驱动,IN是先执行子查询,而EXISTS则是先以外层表为驱动,后执行子查询。所以相较于两者的区别,IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。




9:大数据量时避免 “% 前缀”模糊查询 


原因:% 前缀会导致索引失效,当数据量过大时将十分影响性能。




好了,今天的分享就到这里,欢迎阅读

The end