前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL索引失效

MySQL索引失效

作者头像
兜兜毛毛
发布2021-04-25 15:23:08
1.3K0
发布2021-04-25 15:23:08
举报
文章被收录于专栏:兜兜毛毛兜兜毛毛

在我们常规做数据库开发时,都会为每个表设置适合它的索引来加快数据库的搜索效率。

但有了索引也不是说就万事大吉,所有查询都没问题。像我们使用

但也可能因为你使用错误的SQL语句而无法使用。其中有以下几种,在使用sql查询时尽量避免。

使用!=或<>导致索引失效
代码语言:javascript
复制
select * from user where name <> '张三';
使用模糊查询的索引失效

最左侧不使用%时也会使用索引(最左匹配),否则不使用索引。

代码语言:javascript
复制
select * from user where name like '%三%';
使用not in 或 not exists的索引失效
代码语言:javascript
复制
select * from user where name not in ('张三');
使用is null 或 is not null 的索引失效
代码语言:javascript
复制
select * from user where name is not null;
使用函数导致的索引失效
代码语言:javascript
复制
select * from user where date(create_time) = '2021-02-03';
使用类型不一致的索引失效

查询条件类型与字段类型不相符时,如下边例子,字段是字符串类型条件使用数值类型。

代码语言:javascript
复制
select * from user where name > 30;
运算符导致的索引失效

包括(+、-、*、/)都会导致索引失效

代码语言:javascript
复制
select * from user where age + 2 = 30;
or引起的索引失效

or导致索引失效是在特定情况下,并不是所有的or都会导致索引失效,如果or连接的是一个字段,那么就不会失效,反之索引失效。

代码语言:javascript
复制
select * from user where name = '张三' or age > 30;
MySQL查询优化器最终选择不走索引

即使完全符合索引生效的场景,考虑到实际数据量等原因,最终是否使用索引还要看MySQL优化器的判断。当然你也可以在sql语句中写明强制走某个索引。

索引本身失效

这种情况概率极低,我也只遇到过一回,确定where条件使用了索引也执行了查询,但返回的数据结果与实际不相符。未能找到原因,后来只是把这个索引删除后重建就正常了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用!=或<>导致索引失效
  • 使用模糊查询的索引失效
  • 使用not in 或 not exists的索引失效
  • 使用is null 或 is not null 的索引失效
  • 使用函数导致的索引失效
  • 使用类型不一致的索引失效
  • 运算符导致的索引失效
  • or引起的索引失效
  • MySQL查询优化器最终选择不走索引
  • 索引本身失效
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档