Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

规则优化:扫描行数超过阈值,筛选条件必须带上主键或索引 #2857

Closed
winfredLIN opened this issue Jan 7, 2025 · 3 comments

Comments

@winfredLIN
Copy link
Collaborator

winfredLIN commented Jan 7, 2025

版本信息(Version)

sqle 3.24.12
数据库类型 mysql tdsql

问题描述(Describe)

当一条sql使用到索引,但是索引区分度不高,导致扫描行数很高,对于规则:扫描行数超过阈值,筛选条件必须带上主键或索引。应该触发。但规则的描述需要进行修改。
希望规则名称修改为:扫描行数超过阈值,请检查索引配置

规则名称

扫描行数超过阈值,筛选条件必须带上主键或索引

规则理解

检查执行计划中的扫描行数,如果行数超过阈值,则触发。修改建议是带上主键或索引

问题

已经用了索引,所以规则没有触发
但实际是全扫,效率还是很低

预期

先判断扫描行数是否超过阈值
没有超过,不会触发规则
超过,需要触发规则

人工处理:

如果这时候已经用上了索引,建议选择区分度更高的索引
如果这时候没有用索引,那么建议加上索引

截图或日志(Log)

如何复现(To Reproduce)

  1. 在mysql或tdsql上
  2. 执行一条使用了索引的sql,扫描行数超过了规则的阈值(可调整),就会不触发该规则

问题原因

  1. 通过判断执行计划中的类型,会导致遗漏一些扫描行数高的sql,导致没有按照预期触发规则

解决方案

  1. 取消了对SQL执行计划中执行计划类型的类型判断
  2. 规则名称修改为:扫描行数超过阈值,请检查索引配置

变更影响面

受影响的模块或功能

外部引用的潜在问题或风险

版本兼容性

测试建议

  1. 建议测试tdsql和mysql两个版本的规则
  2. 规则名称是否变化
  3. 规则检测是否能覆盖使用索引但是扫描行数高的sql
@winfredLIN
Copy link
Collaborator Author

gitlab sqle-td-mysql-plugin/-/merge_requests/61

@winfredLIN
Copy link
Collaborator Author

winfredLIN commented Jan 9, 2025

gitlab sqle/sqle-td-mysql-plugin/-/merge_requests/63
gitlab sqle/sqle-td-mysql-plugin/-/merge_requests/66

@winfredLIN
Copy link
Collaborator Author

winfredLIN commented Jan 10, 2025

gitlab sqle/sqle-td-mysql-plugin/-/merge_requests/67
切出zjrc的3.2408分支,且应用该规则到该分支上

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants