sql优化方法(索引)

   sql优化策略

   下面的方法适用于数据量大的情况下sql不走索引,数据少的就没必要了,几千条数据完全没有必要建索引。
   
   

   sql优化的精髓在于,能走索引绝不回表查询,尽量出现索引覆盖,避免全表扫描,能少查一个字段就少查一个,不要总是select *。

   
   

   查询语句语法顺序

 SELECT 
 DISTINCT <select_list>
 FROM <left_table>
 <join_type> JOIN <right_table>
 ON <join_condition>
 WHERE <where_condition>
 GROUP BY <group_by_list>
 HAVING <having_condition>
 ORDER BY <order_by_condition>
 LIMIT <limit_number>

   

   如何避免sql不走索引

   1.尽量不要在字段左边也就是字段开头模糊查询,会让数据库引擎不走索引直接全表扫描,但是可以在字段的后面使用模糊查询,如果一定要在前面使用可以使用MySQL内置的函数INSTR(str,substr) 来匹配。
   
   ps: INSTR(str, substr):返回子串substr在字符串str中的第一个出现的位置,如果存在则返回1~N,不存在返回0,任意一个字符串为NULL则返回NULL。
   
   
   2.能不用in和not in就不用,用了会导致全表扫描,可以用between代替。
   
   
   3.能不用or就不用,用了会导致全表扫描,可以用between代替。可以用union代替。
   
   
   4.尽量不要用null值当判断条件,用了会导致全表扫描,如果该值为空可以默认为0。
   
   
   5.避免在where条件的左边使用运算符号,用了会导致数据库引擎放弃索引全表扫描(那左边÷10不就相当于右边*10吗,调个方向,他就走索引了)。
   
   
   6.查询条件中尽量不使用不等于符号(<>,!=),用了会导致数据库引擎放弃索引全表扫描。
   
   
   7.where的条件如果有复合索引,记得按照索引最左匹配原则进行摆放。
   ps:最左匹配原则,我简单的形容一下,假设有a、b、c三个索引,只有a=xxx、b=xxx、c=xxx,a=xxx、b=xxx,a=xxx这三种情况才会走索引。
   
   
   8.条件语句中进行类型转换会不使用索引。
   例如:a字段是char类型,你像下面这么写sql,涉及隐式类型转换,那必然是不会走索引的。

                                    select*from table where a=1;

       
       

   方法肯定还有好多,我这只列举我能想起来的供我自己加深记忆力

   我发言完毕,bye~

Guess you like

Origin blog.csdn.net/imagineluopan/article/details/120488696