【项目实现典型案例】12.数据库数据类型不一致导致查询慢
创始人
2025-05-28 09:57:09

目录

  • 一:背景介绍
  • 二:索引失效复现
  • 四:索引实现的六种情况
    • 1、类型转换,函数
    • 2、ISNULL
    • 3、通配符开头
    • 4、范围查询
    • 5、组合索引,不符合最左匹配原则
    • 6、WHERE子句中的OR
  • 四:总结

一:背景介绍

MySql数据库的is_delete字段,两个不同的表,一个表内有217069条数据,另一个表中有76015条数据,查询速度很慢,排查到是索引失效的问题。
在这里插入图片描述
在这里插入图片描述

二:索引失效复现

where条件里,字符类型的列如果传递的是数据类型的话可以查出来数据,但是索引会失效
对应的索引
在这里插入图片描述
表中字段的数据类型
在这里插入图片描述
使用数值型进行查询
在这里插入图片描述
type中的ALL代表全表查询,用结果上来看我们添加的索引是没有生效的。因为我们在执行sql语句的时候is_delete赋的值是数值类型,但是数据库中是字符类型。所以进行了类型的转换。导致索引是没有生效的。
使用字符型进行查询
在这里插入图片描述
type中从ALL转换成了ref,索引失效了

四:索引实现的六种情况

1、类型转换,函数

在这里插入图片描述

2、ISNULL

在这里插入图片描述

3、通配符开头

在这里插入图片描述

4、范围查询

在这里插入图片描述

5、组合索引,不符合最左匹配原则

假设我们对字段 a,b 建立了一个组合索引(a,b)。
如果我们的查询是以下几种,则会正常走联合索引:

where a = 1;
where a = 2 and b = 2;
如果是如下几种则不会走组合索引:

where b = 2;
where b = 2 and a = 3;
通过对比我们可以看出,索引的生效是遵循最左匹配原则的。在使用的时候,必须从最左侧的索引开始。

6、WHERE子句中的OR

在这里插入图片描述

四:总结

遇到该类问题,要先明确什么是索引,以及哪种情况下会导致索引失效。

相关内容

热门资讯

匈奴人长什么样子?境外考古还原... 匈奴人长什么样子?不清楚的读者可以和趣历史小编一起看下去。这是一个长期以来困扰中国人和欧洲人的大问题...
安徽汽车职业技术学院最新或20... 我院毕业生具有理论知识扎实、技能突出等优势,主要在江汽集团公司及安徽省大中型企事业单位就业。第四章 ...
邯郸之战秦国为什么会输呢 只因... 今天趣历史小编给大家准备了:邯郸之战的文章,感兴趣的小伙伴们快来看看吧!长平之战后,秦国已经战胜当时...
为什么秦国会被称为虎狼之师 而... 今天趣历史小编给大家准备了:秦国虎狼之师的文章,感兴趣的小伙伴们快来看看吧!说到我国历史上的战国时期...
秦国书同文车同轨 秦国之前的文... 还不知道:七国文字的读者,下面趣历史小编就为大家带来详细介绍,接着往下看吧~秦国的统一,不仅仅是地域...