【项目实现典型案例】12.数据库数据类型不一致导致查询慢

简介: 【项目实现典型案例】12.数据库数据类型不一致导致查询慢

一:背景介绍

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

四:总结

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


相关文章
|
5天前
|
ARouter 关系型数据库 MySQL
Django项目同时连接多个不同的数据库(7)
【7月更文挑战第7天】在Django项目中配置连接多个数据库,你需要: 1. 在`settings.py`中配置多个数据库, 2. 在`settings.py`内设置数据库路由,指定每个应用使用的数据库,
18 2
|
5天前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
6天前
|
SQL XML Java
解决Spring Boot项目中的数据库迁移问题
解决Spring Boot项目中的数据库迁移问题
|
6天前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
12 1
|
10天前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
|
13天前
|
存储 缓存 关系型数据库
如何优化数据库查询?
【7月更文挑战第2天】如何优化数据库查询?
18 1
|
7天前
|
SQL XML Java
解决Spring Boot项目中的数据库迁移问题
解决Spring Boot项目中的数据库迁移问题
|
9天前
|
SQL 存储 数据库
MSSQL数据库性能调优实战:索引、查询与并发控制的深度剖析
在数据库管理领域,Microsoft SQL Server(MSSQL)的性能调优是保障业务高效运行的核心任务
|
10天前
|
前端开发 JavaScript NoSQL
软件开发常见流程之若依项目修改,前后端本地启动,本地必须有Redis+Navicate启动数据库
软件开发常见流程之若依项目修改,前后端本地启动,本地必须有Redis+Navicate启动数据库
|
11天前
|
SQL 关系型数据库 MySQL
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做