SQL优化及索引失效情况

本文探讨了数据库查询优化的重要技巧,包括合理创建索引,避免使用全表扫描的操作如'%'开头的LIKE查询,减少OR条件和NULL判断。建议使用具体的列名而非SELECT*,并提出在表达式和函数操作中正确使用索引的方法。同时,文章指出在某些情况下,如唯一性差或频繁更新的字段,可能不需要建立索引。
摘要由CSDN通过智能技术生成
  1. 建立索引时优先考虑 where、group by 使用到的字段。
  2. 避免使用 select * ,尽量使用具体的返回字段。
  3. 减少使用 in 和 not in ,其会导致数据库引擎放弃索引进行全表扫描,可用 between 代替,若是子查询,也可用 exists 代替。
  4. 避免使用 or ,会导致数据库引擎放弃索引进行全表扫描。。
  5. 避免在字段开头使用模糊查询,会导致数据库引擎放弃索引进行全表扫描。如 %like% ->like%。
  6. 避免进行 null 值判断,尽量给字段添加默认值,否则会导致数据库引擎放弃索引进行全表扫描。
  7. 避免在 where 条件中等式的左侧进行表达式、函数操作,否则会导致数据库引擎放弃索引进行全表扫描。
    如:SELECT * FROM t2 WHERE score/10 = 9;
    优化可见表达式、函数操作移动到等号右侧:
    SELECT * FROM t2 WHERE score = 10*9

索引失效情况总结:

  • 有or必全有索引。
  • 复合索引未用左列字段。
  • .like以%开头。
  • 需要类型转换。
  • where中索引列有运算。
  • where中索引列使用了函数。
  • 如果mysql觉得全表扫描更快时(数据少)。

不必要使用索引的情况:

  • 唯一性差。
  • 频繁更新的字段不用(更新索引消耗)。
    where中不用的字段。
    索引使用<>时,效果一般。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值