当前位置: 首页 > news >正文

SQL 不走索引的常见情况

在 SQL 查询中,即使表上有索引,某些情况下数据库优化器也可能决定不使用索引。以下是常见的不走索引的情况:

1. 使用否定操作符

  • NOT IN

  • != 或 <>

  • NOT EXISTS

  • NOT LIKE

2. 对索引列使用函数或运算

-- 不走索引
SELECT * FROM users WHERE YEAR(create_time) = 2023;
SELECT * FROM products WHERE price * 1.1 > 100;

-- 走索引
SELECT * FROM users WHERE create_time BETWEEN '2023-01-01' AND '2023-12-31';

3. 隐式类型转换

-- 假设 user_id 是字符串类型
SELECT * FROM users WHERE user_id = 123; -- 不走索引(数字转字符串)

4. 使用前导通配符的 LIKE 查询

SELECT * FROM users WHERE name LIKE '%张'; -- 不走索引
SELECT * FROM users WHERE name LIKE '张%'; -- 可能走索引

5. OR 条件不当使用

-- 如果 age 或 name 中有一个没有索引,可能全表扫描
SELECT * FROM users WHERE age = 20 OR name = '张三';

6. 复合索引未遵循最左前缀原则

-- 假设有复合索引 (a, b, c)
SELECT * FROM table WHERE b = 2 AND c = 3; -- 不走索引

7. 数据量过小

  • 当表中数据量很少时,全表扫描可能比使用索引更快

8. 索引选择性低

  • 当列的值重复率很高(如性别字段),数据库可能选择全表扫描

9. 使用了 IS NULL 或 IS NOT NULL

SELECT * FROM users WHERE phone IS NULL; -- 可能不走索引

10. 查询返回大量数据

  • 当查询需要返回表中大部分数据时(如超过20-30%),优化器可能选择全表扫描

11. 统计信息过时

  • 数据库的统计信息没有及时更新,导致优化器做出错误判断

12. 强制类型转换

SELECT * FROM users WHERE CAST(age AS CHAR) = '25'; -- 不走索引

13. 使用 ORDER BY 非索引列

  • 当排序字段没有索引时,可能导致全表扫描

了解这些情况有助于优化 SQL 查询性能,避免不必要的全表扫描。

http://www.dtcms.com/a/123126.html

相关文章:

  • 小白电路设计-设计7-固定式倍压器直流稳压电源电路设计
  • Elasticsearch 系列专题 - 第三篇:搜索与查询
  • 超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型|文献速递-深度学习医疗AI最新文献
  • linux内核
  • 2021-10-19 C++奇怪数
  • 牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记1
  • MCU控制4G模组(标准AT命令),CatM的最大速率?
  • 学习笔记四——Rust 函数通俗入门
  • 城电科技 | 从概念到落地:如何打造真正的智慧零碳园区?
  • 粘性定位(position:sticky)——微信小程序学习笔记
  • Diffusion Policy Visuomotor Policy Learning via Action Diffusion官方项目解读(二)(6)
  • 阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
  • js逆向入门图灵爬虫练习平台第六题
  • AI小程序+SpringAI+管理后台+源码+支持动态添加大模型+支持动态添加AI应用
  • ESP8266水位监测以及温湿度数据采集
  • 008二分答案+贪心判断——算法备赛
  • HDCP(二)
  • 爱普生TG-5510CA和TG-5510CB晶振成为服务器中的理想之选
  • SLAM文献之SuMa++: Efficient LiDAR-based Semantic SLAM
  • AI测试之Midscene.js
  • 英语单词 list 9
  • 图神经网络+多模态:视频动作分割的轻量高效新解法
  • Vue3的Composition API与React Hooks有什么异同?
  • 深度学习总结(6)
  • 皮质醇水平高低对健康的影响及科学建议
  • 【AI论文】GPT-4o图像生成能力的实证研究
  • DP主站如何华丽变身Modbus TCP网关!
  • 表格计算 | 第六届蓝桥杯国赛JavaB组
  • linux下io操作详细解析
  • Pandas分块读取技术:高效处理大数据的秘密武器