前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL如何强制指定索引

MySQL如何强制指定索引

原创
作者头像
半月无霜
发布2024-07-11 19:44:10
950
发布2024-07-11 19:44:10
举报
文章被收录于专栏:半月无霜半月无霜

MySQL如何强制指定索引

一、介绍

在平常的慢SQL优化过程中,往往会出现走不到索引的情况。

有时候,确实是因为写的查询条件太差劲导致。

但有时,明明就是有索引,查询条件也写对的,可就偏偏走到了另外一条索引上。

这种情况往往发生在连表的过程中,因为我们连表通常是使用idref_id进行关联,偶尔会附带一些其他的条件。

那么,该如何指定索引呢?

二、使用

1)FORCE INDEX

代码语言:javascript
复制
-- 单表的查询
SELECT * FROM table_name FORCE INDEX (index_name) WHERE condition;
​
-- 连表的查询
SELECT * FROM table_name t1 FORCE INDEX (index_name)
JOIN table_name_bak t2 FORCE INDEX (index_name_bak) ON t1.id = t2.ref_id
WHERE condition;

在表后添加FORCE INDEX (index_name),记得索引名称一定要正确

代表使用了这个固定的索引去查询那张表

2)USE INDEX

代码语言:javascript
复制
-- 单表的查询
SELECT * FROM table_name USE INDEX (index_name) WHERE condition;
​
-- 连表的查询
SELECT * FROM table_name t1 USE INDEX (index_name)
JOIN table_name_bak t2 USE INDEX (index_name_bak) ON t1.id = t2.ref_id
WHERE condition;

和上面FORCE INDEX(index_name)不同的是,这边是允许MySQL,如果有更好的索引,就选择更好的索引。

三、最后

其实,我并不推荐这种指定索引的方式。

强制索引可能会导致性能问题,一杆子打死,对后面优化器选择最优的索引不利。

在大多数情况下,我们是没有必要强制指定索引

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL如何强制指定索引
    • 一、介绍
      • 二、使用
        • 1)FORCE INDEX
        • 2)USE INDEX
      • 三、最后
      相关产品与服务
      云数据库 MySQL
      腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档