【通用行业开发部】索引问题小排查

简介: 数据库表已建立相关索引,查询SQL也遵循了相关规范,但是查询SQL依然不走索引。甚至同样的表,同样的索引,同样的查询SQL,在非生产环境走索引,但是生产环境却走了全表扫描。遇到此类问题该如何排查?又有那些注意事项呢?

在日常研发和排查线上环境中,我们常常遇到数据库SQL查询的性能问题。通常而言,我们按照相关的规范要求,针对数据库表,建立合适的索引,在查询SQL中遵循相关的规范即可解决相关问题。但往往也会遇到一些特殊情况。如数据库表已建立相关索引,查询SQL也遵循了相关规范,但是查询SQL依然不走索引。甚至同样的表,同样的索引,同样的查询SQL,在非生产环境走索引,但是生产环境却走了全表扫描。遇到此类问题该如何排查?又有那些注意事项呢?
首先,我们通过执行相关SQL,判断下问题现状,为后续的分析及处理打下基础:
1、运行执行计划,查看是否走索引:
EXPLAIN select file_name1,file_name2 from table_name; //file_name1、file_name2字段名 table_name表名
执行计划.jpg

2、运行语句,查看索引的相关情况
show index from table_name;//table_name 是表名
索引.png

通过查看,我们可以很清晰的发现,执行计划不走索引,表索引存在,但是索引的cardinality为0。cardinality是索引列的唯一值的个数,如果是复合索引就是唯一组合的个数,是MySQL优化器对语句执行计划进行判定时依据。如果cardinality为0或者较小,MySQL优化器会认为该索引对查询SQL没有帮助,会自动放弃走相关索引。

那么为什么cardinality会较小甚至为0呢,造成这种情况的原因有多种,通常而言包括如下:
1、索引没有区分度,导致cardinality较小,但通常不会为0。该问题比较容易排查,通过查询索引健不重复值即可看出,不再赘述。
2、数据库存储空间不足。在数据库存储空间使用达到一定比例后,导致数据库索引无法真实建立,cardinality为0。
3、频繁的大表删除或插入等,导致关键字的分布存在问题;

根据由易到难的操作,我们通常先排查是否是存储空间不足导致的该现象出现:
1、查看整体大小:
select sum(data_length/1024/1024) as data from tables
2、查看对应的表的大小:
select
concat(truncate(data_length/1024/1024,2),' MB') as data_size,
concat(truncate(index_length/1024/1024,2),' MB') as index_size
from information_schema.tables
where TABLE_SCHEMA = 'databse_name' and TABLE_NAME = 'table_name' //databse_name是数据库名 table_name 是表名
通常而言,在使用率超过60%,建议扩容;超过80%,必须扩容。

如果表空间使用率较低,或者扩容后并没有解决相关问题,则建议通过表分析处理。
表分析SQL:analyze table table_name //table_name 是表名
需要提醒的是:表分析建议由DBA处理。表分析因为需要关闭table,然后重新打开table,在有表修改及慢SQL执行的情况下,有很大可能会导致锁表。

相关文章
|
监控 前端开发 JavaScript
前端监控(Frontend Monitoring):保障用户体验的不可或缺工具
前端监控是维护卓越用户体验的关键,它使您能够追踪、分析和解决您的Web应用程序中的性能问题和错误。在本博客中,我们将深入探讨前端监控的重要性、监控的关键指标以及如何实施前端监控来提高您的应用程序的可用性和性能。
1282 0
|
6月前
|
小程序 数据可视化 数据安全/隐私保护
代练护航小程序商业版源码:含运营后台 + 数据看板,源码部署即商用
小程序支持抢单大厅、实时聊天、快捷/自定义发单、订单管理及数据大屏;后台涵盖订单、用户、游戏与权限管理,助力高效运营。
498 0
|
存储 缓存 分布式计算
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。 作者:杨关锁,北京镜舟科技研发工程师
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
|
8月前
|
安全 物联网 API
Windows 11 25H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 9 月发布)
Windows 11 25H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 9 月发布)
7508 15
Windows 11 25H2 中文版、英文版 (x64、ARM64) 下载 (2025 年 9 月发布)
|
数据可视化 数据挖掘
知识共享:解锁企业创新潜力的关键
本文探讨了在信息爆炸时代构建高效知识共享机制的重要性及方法。知识共享不仅能提升团队协作效率和创新能力,还能降低重复劳动、促进知识积累。文章从文化驱动、技术支持和流程优化三个维度介绍了建立知识共享机制的关键要素,并推荐了创新工具如板栗看板,帮助团队通过模块化、可视化的方式优化知识管理流程,最终实现知识共享的无缝嵌入与高效应用。
587 15
|
人工智能 自然语言处理 数据挖掘
Claude 3.5:一场AI技术的惊艳飞跃 | AIGC
在这个科技日新月异的时代,人工智能(AI)的进步令人惊叹。博主体验了Claude 3.5 Sonnet的最新功能,对其卓越的性能、强大的内容创作与理解能力、创新的Artifacts功能、视觉理解与文本转录能力、革命性的“computeruse”功能、广泛的应用场景与兼容性以及成本效益和易用性深感震撼。这篇介绍将带你一窥其技术前沿的魅力。【10月更文挑战第12天】
996 1
|
弹性计算 固态存储 大数据
阿里云服务器租用费用价格表:2025最新轻量+ECS+GPU优惠1年、1个月和1小时报价单
阿里云服务器租用费用价格表涵盖2025年最新轻量应用服务器、ECS云服务器及GPU服务器优惠报价。轻量应用服务器2核2G配置,一年仅68元(秒杀38元),适合个人开发者;ECS云服务器提供多种规格,如2核2G经济型99元/年、2核4G企业专享199元/年。高性能实例如4核16G游戏服务器70元/月,8核32G为160元/月。GPU服务器方面,T4计算卡4核15G配置低至1878.4元/月。此外,阿里云支持按小时计费,灵活满足不同需求。续费优惠政策明确,长周期享更高折扣,具体以官方页面为准。
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
808 3
|
SQL 人工智能 自然语言处理
NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理
NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理
NL2SQL基础系列(2):主流大模型与微调方法精选集,Text2SQL经典算法技术回顾七年发展脉络梳理
|
机器学习/深度学习 安全 物联网
安全多方计算之十:联邦学习与安全多方计算
安全多方计算之十:联邦学习与安全多方计算
1011 0