iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >什么是MySQL索引提示
  • 699
分享到

什么是MySQL索引提示

2024-04-02 19:04:59 699人浏览 泡泡鱼
摘要

本篇内容介绍了“什么是Mysql索引提示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  &nb

本篇内容介绍了“什么是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: test2
Create 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=utf8mb4
1 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: test2
Create 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=utf8mb4
1 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: test2
Create 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=utf8mb4
1 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索引提示”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 什么是MySQL索引提示

本文链接: https://www.lsjlt.com/news/62371.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 什么是MySQL索引提示
    本篇内容介绍了“什么是MySQL索引提示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  &nb...
    99+
    2024-04-02
  • mysql索引是什么
    这篇文章主要介绍了mysql索引是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql索引是什么?索引是能够使MySQL快速读取数据的数...
    99+
    2024-04-02
  • 什么是MySQL索引
    这篇文章给大家介绍什么是MySQL索引,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言:索引是MySQL数据库中的重要对象之一,索引的目的在于提高查询效率。可以类比字典中的目录,查找...
    99+
    2024-04-02
  • MySQL的索引是什么
    本篇文章为大家展示了MySQL的索引是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。和其它数据库一样,MySQL索引对表中指定列进行排序后另外保存,用于快速查找...
    99+
    2024-04-02
  • 在mysql中索引是是什么
    这篇文章给大家分享的是有关在mysql中索引是是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在mysql中,索引是一种特殊的数据库结构,由数据...
    99+
    2024-04-02
  • MySQL索引原理是什么
    这篇文章主要介绍MySQL索引原理是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!摘要: 就一起来聊一聊MySQL索引。 什么是索引? 百度百科是这样描述的: 索引是为来加速对表...
    99+
    2024-04-02
  • MySQL中的索引是什么
    这篇文章将为大家详细讲解有关MySQL中的索引是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。对于高级开发,我们经常要编写一些复杂的sql,那么防止写出低效sql,我...
    99+
    2024-04-02
  • mysql什么是空间索引
    mysql空间索引是一种用于优化空间数据查询的索引类型。空间索引利用R树数据结构来优化空间数据的存储和查询,可以在地理信息系统等应用中发挥重要作用,空间索引的性能取决于多个因素,包括数据量、查询复杂度以及存储引擎的选择等,当数据量很大时,空...
    99+
    2023-07-19
  • MySQL索引下推是什么
    本文小编为大家详细介绍“MySQL索引下推是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL索引下推是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。SELEC&...
    99+
    2024-04-02
  • mysql索引文件是什么
    MySQL索引文件是用于快速查找和检索数据库中数据的数据结构,它是在表中的一个或多个列上创建的,以提高查询性能和数据检索速度,包含了索引键值和指向实际数据位置的指针,索引文件通常存储在磁盘上,与表数据文件分开存储。本教程操作系统:Windo...
    99+
    2023-08-02
  • mysql前缀索引是什么
    这篇“mysql前缀索引是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql前缀...
    99+
    2023-05-25
    mysql
  • MySQL索引提高查询效率的原因是什么
    小编给大家分享一下MySQL索引提高查询效率的原因是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql教程栏目介绍索引提高查询效率的原因。背景我相信大家在数据库优化的时候都会说到索引...
    99+
    2024-04-02
  • mysql中什么是聚簇索引
    这篇文章将为大家详细讲解有关mysql中什么是聚簇索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明聚簇索引不需要我们显示的创建,他是由InnoDB存储引擎自动为我们创建的。如果没有...
    99+
    2023-06-15
  • mysql中索引类型是什么
    这篇文章给大家分享的是有关mysql中索引类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、索引类型主键索引只能作用于一个字段(列),字段值不能是null,也不能重复。唯一索引只能作用于一个字段,字段值...
    99+
    2023-06-15
  • mysql加索引是什么意思
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-06-02
  • MySQL索引的原理是什么
    本篇内容介绍了“MySQL索引的原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!索引,可能让好很多...
    99+
    2024-04-02
  • MySQL中索引指的是什么
    这篇文章将为大家详细讲解有关MySQL中索引指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。索引是什么?一张表有 500 万条数据,在没有索引的 name 字段上...
    99+
    2024-04-02
  • MySQL的索引原理是什么
    本篇内容介绍了“MySQL的索引原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、索引的本质索引...
    99+
    2024-04-02
  • mysql中什么是全文索引
    这篇文章将为大家详细讲解有关mysql中什么是全文索引,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明MyISAM存储引擎支持全文索引,用于查找文本中的关键词,而不是直接比较是否相等。...
    99+
    2023-06-15
  • MySQL索引的作用是什么
    小编给大家分享一下MySQL索引的作用是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!首先建立一张数据库表:create table single_table(id int no...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作