什么是MySQL索引提示
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容介绍了"什么是MySQL索引提示"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SQL提示,是
千家信息网最后更新 2025年01月31日什么是MySQL索引提示
本篇内容介绍了"什么是MySQL索引提示"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的。MySQL数据库支持索引提示(INDEX HINT)显式的告诉优化器使用了哪个索引。有以下几种情况可能用到索引提示:
1、MySQL数据库的优化器错误的选择了某个索引,导致SQL运行很慢。这个在情况比较少见。优化器在绝大部分情况下工作的非常有效和正确。
2、某些SQL语句可以选择的索引非常多,这时优化器选择执行计划时间的开销可能会大于SQL语句本身。例如优化器分析Range查询本身就是比较耗时的操作。这时DBA或开发人员分析最优的索引选择,通过index hint来强制使优化器不进行各个路径的成本分析直接选择指定的索引来完成查询。
index hint种类
MySql共有三种索引提示,分别是:USE INDEX、IGNORE INDEX和FORCE INDEX,他们之间的区别是:
1、use index:use index告诉MySql用列表中的其中一个索引去做本次查询,就可以让MySQL不再考虑其他可用的索引建议MySQL用这些索引,但是MySQL不一定会用。
MySQL > show create table test2 \G*************************** 1. row *************************** Table: test2Create Table: CREATE TABLE `test2` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `order_seq` bigint(16) NOT NULL, `order_type` int(11) DEFAULT NULL, `order_flag` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_id` (`id`), KEY `idx_id_orderseq` (`id`,`order_seq`), KEY `idx_order_seq` (`order_seq`)) ENGINE=InnoDB AUTO_INCREMENT=15002212 DEFAULT CHARSET=utf8mb41 row in set (0.00 sec)MySQL > explain select * from test2 where id>10000 and id<1000000;+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+| 1 | SIMPLE | test2 | NULL | range | PRIMARY,idx_id,idx_id_orderseq | PRIMARY | 8 | NULL | 2021716 | 100.00 | Using where |+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)MySQL > explain select * from test2 use index(idx_id) where id>10000 and id<100000;+----+-------------+-------+------------+-------+---------------+--------+---------+------+--------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+--------+---------+------+--------+----------+-----------------------+| 1 | SIMPLE | test2 | NULL | range | idx_id | idx_id | 8 | NULL | 180580 | 100.00 | Using index condition |+----+-------------+-------+------------+-------+---------------+--------+---------+------+--------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)MySQL > explain select * from test2 use index(idx_order_seq) where id=10000;+----+-------------+-------+------------+------+---------------+------+---------+------+----------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+----------+----------+-------------+| 1 | SIMPLE | test2 | NULL | ALL | NULL | NULL | NULL | NULL | 14611349 | 0.00 | Using where |+----+-------------+-------+------------+------+---------------+------+---------+------+----------+----------+-------------+1 row in set, 1 warning (0.01 sec)
2、ignore index:ignore index告诉mysql不要使用某些索引去做本次查询
MySQL > show create table test2 \G*************************** 1. row *************************** Table: test2Create Table: CREATE TABLE `test2` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `order_seq` bigint(16) NOT NULL, `order_type` int(11) DEFAULT NULL, `order_flag` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_id` (`id`), KEY `idx_id_orderseq` (`id`,`order_seq`), KEY `idx_order_seq` (`order_seq`)) ENGINE=InnoDB AUTO_INCREMENT=15002212 DEFAULT CHARSET=utf8mb41 row in set (0.00 sec)MySQL > explain select * from test2 where id>10000 and id<1000000;+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+| 1 | SIMPLE | test2 | NULL | range | PRIMARY,idx_id,idx_id_orderseq | PRIMARY | 8 | NULL | 2021716 | 100.00 | Using where |+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)MySQL > explain select * from test2 ignore index(primary) where id>10000 and id<1000000;+----+-------------+-------+------------+-------+------------------------+--------+---------+------+---------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+------------------------+--------+---------+------+---------+----------+-----------------------+| 1 | SIMPLE | test2 | NULL | range | idx_id,idx_id_orderseq | idx_id | 8 | NULL | 1971862 | 100.00 | Using index condition |+----+-------------+-------+------------+-------+------------------------+--------+---------+------+---------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)
3、force index:强制MySQL使用一个特定的索引
MySQL > show create table test2 \G*************************** 1. row *************************** Table: test2Create Table: CREATE TABLE `test2` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `order_seq` bigint(16) NOT NULL, `order_type` int(11) DEFAULT NULL, `order_flag` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_id` (`id`), KEY `idx_id_orderseq` (`id`,`order_seq`), KEY `idx_order_seq` (`order_seq`)) ENGINE=InnoDB AUTO_INCREMENT=15002212 DEFAULT CHARSET=utf8mb41 row in set (0.00 sec)MySQL > explain select * from test2 where id>10000 and id<1000000;+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+| 1 | SIMPLE | test2 | NULL | range | PRIMARY,idx_id,idx_id_orderseq | PRIMARY | 8 | NULL | 2021716 | 100.00 | Using where |+----+-------------+-------+------------+-------+--------------------------------+---------+---------+------+---------+----------+-------------+1 row in set, 1 warning (0.00 sec)MySQL > explain select * from test2 force index(idx_id) where id>10000 and id<1000000;+----+-------------+-------+------------+-------+---------------+--------+---------+------+---------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+--------+---------+------+---------+----------+-----------------------+| 1 | SIMPLE | test2 | NULL | range | idx_id | idx_id | 8 | NULL | 1971862 | 100.00 | Using index condition |+----+-------------+-------+------------+-------+---------------+--------+---------+------+---------+----------+-----------------------+1 row in set, 1 warning (0.00 sec)
"什么是MySQL索引提示"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
索引
提示
选择
情况
查询
数据
数据库
语句
分析
内容
就是
更多
知识
强制
实用
少见
有效
重要
学有所成
接下来
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
it网络技术服务商
软件开发高清视频教程
数据库转换技术大全
arcgis许可管理服务器
ifix 历史服务器
物流企业数据库
王珊数据库原理ppt
乌兰浩特零基础app软件开发
第三方登录数据库
网络技术主管工资
服务器带外管理口作用
哪里可以接软件开发
北京慧信恒通网络技术有限公司
酷京网络技术工作室
软件开发没有项目如何写简历
网页显示正在连接服务器
公安厅网络安全管理总队
甲骨文服务器流量
软件开发的五大步骤
小程序发布是上传到服务器吗
数据库text分段
打通电话出现服务器异常
计算机网络技术的学业发展
数据库编码 技术研究
苏州程序软件开发大概要多少钱
网件的网络安全密钥
数据库主键的设计方法
幻塔怎么看是哪个服务器
ro250 数据库
网络安全规定 个人