文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

索引失效的情况和解决方法

2023-09-16 08:51

关注

1. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描

SELECT * FROM user WHERE name LIKE '%用%'​-- 优化方式:尽量在字段后面使用模糊查询SELECT * FROM user WHERE name LIKE '用%'

如果需求是要在前面使用模糊查询,使用MySQL内置函数INSTR(str,substr) 来匹配,作用类似于java中的indexOf()

2. 尽量避免使用in 和not in,会导致引擎走全表扫描

SELECT * FROM user WHERE id IN (2,3)​-- 优化方式:如果是连续数值,可以用between代替SELECT * FROM user WHERE id BETWEEN 2 AND 3

3. 尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描

select * from user WHERE id = 1 or id = 3​-- 优化方式:可以用union(且)代替orselect * from user WHERE id = 1UNIONselect * from user WHERE id = 3

4. 尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描

select * from user WHERE age is null ​-- 优化方式:可以给字段添加默认值0,对0值进行判断select * from user WHERE age = 0

5.尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描

可以将表达式、函数操作移动到等号右侧 ( 不建议这样写会造成运行效率降低 )

-- 全表扫描SELECT * FROM user WHERE age/10 = 9-- 走索引SELECT * FROM user WHERE age = 10*9

6. 当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描

SELECT name, age, pwd FROM user and 1=1​-- 优化方式:用代码拼装sql时进行判断,没 where 条件就去掉 where,有where条件就加 andSELECT name, age, pwd FROM user WHERE 1 and 1

7. 查询条件不能用 < > 或者 !=

使用索引列作为条件进行查询时,需要避免使用<>或者!=等判断条件。要去java进行判断,不能对数据库进行操作

8. where条件仅包含复合索引非前置列

如下:复合(联合)索引包含a1,b2,c3三列,但SQL语句没有包含索引前置列"a1",按照MySQL联合索引的最左匹配原则,不会走联合索引

-- 创建联合索引create index user_index on user (name,age,pwd)-- 这种方式是不会走索引的select name,age,pwd from user where age=123 and pwd=''

9. 隐式类型转换造成不使用索引

如下SQL语句由于索引对列类型为varchar,但给定的值为数值,涉及隐式类型转换,造成不能正确走索引。

select name from table where name = 123; 

来源地址:https://blog.csdn.net/A0G001/article/details/128188597

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯