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~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL优化中使用索引是一种常见的方法索引可以加快数据库的查询速度和性能。下面是一些使用索引进行SQL优化的常见技巧: 1. 选择合适的列进行索引:通常情况下,需要在经常用于查询条件的列上创建索引。选择经常用于筛选、排序或连接操作的列可以提高查询性能。 2. 避免过多的索引:虽然索引可以提高查询速度,但过多的索引会增加数据库的维护成本并降低写入性能。只创建必要的索引,避免不必要的列进行索引。 3. 多列索引优化:对于经常一起使用的列,可以创建多列索引以提高查询性能。多列索引可以更好地满足复杂查询条件。 4. 聚簇索引优化:聚簇索引是一种特殊的索引类型,它可以将数据物理上组织在一起。通过合理地选择聚簇索引,可以减少磁盘IO和提高查询性能。 5. 使用覆盖索引:覆盖索引是指索引包含了查询所需的所有列。通过使用覆盖索引,可以减少数据库的访问次数,从而提高查询性能。 6. 定期更新统计信息:统计信息用于查询优化器选择合适的索引和执行计划。定期更新统计信息可以确保查询优化器能够做出更准确的选择,提高查询性能。 7. 避免索引过度优化:有时候过度使用索引可能会导致性能下降。当数据量较小或查询频率低时,可以考虑不使用索引或者使用覆盖索引来避免过度优化带来的性能问题。 需要注意的是,索引的创建和维护会增加额外的开销,因此在使用索引进行优化时需要综合考虑查询频率、数据量和维护成本等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值