【Mysql优化】索引覆盖

索引覆盖

  是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”,比平时的查询少一次到磁盘读数据的操作。(索引正好覆盖到查询的数据)

例如下面:

mysql> use exam9;
Database changed
mysql> desc options;
+----------------+---------------+------+-----+---------+-------+
| Field          | Type          | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+-------+
| optionId       | varchar(40)   | NO   | PRI | NULL    |       |
| questionId     | varchar(40)   | YES  | MUL | NULL    |       |
| optionContent  | varchar(2000) | YES  |     | NULL    |       |
| optionWithTag  | varchar(2000) | YES  |     | NULL    |       |
| optionSequence | varchar(2)    | YES  |     | NULL    |       |
| isAnswer       | varchar(2)    | YES  |     | NULL    |       |
| description    | varchar(300)  | YES  |     | NULL    |       |
+----------------+---------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> reset query cache;      #清空缓存
Query OK, 0 rows affected (0.00 sec)

mysql> set profiling=on;    #打开profiling功能
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select optioncontent from options where optionid=‘000406aa1b89461d8cfd85f
b0e5d9e01‘;
+------------------------+
| optioncontent          |
+------------------------+
| 基础工程完毕进行回填后 |
+------------------------+
1 row in set (0.03 sec)

mysql> select optionid from options where optionid=‘000406aa1b89461d8cfd85fb0e5d
9e01‘;
+----------------------------------+
| optionid                         |
+----------------------------------+
| 000406aa1b89461d8cfd85fb0e5d9e01 |
+----------------------------------+
1 row in set (0.03 sec)

mysql> show profiles;  #显示概要信息
+----------+------------+-------------------------------------------------------
------------------------------+
| Query_ID | Duration   | Query
                              |
+----------+------------+-------------------------------------------------------
------------------------------+
|        1 | 0.03480675 | select optioncontent from options where optionid=‘0004
06aa1b89461d8cfd85fb0e5d9e01‘ |
|        2 | 0.03624525 | select optionid from options where optionid=‘000406aa1
b89461d8cfd85fb0e5d9e01‘      |
+----------+------------+-------------------------------------------------------
------------------------------+
2 rows in set, 1 warning (0.00 sec)

mysql> explainselect optionid from options where optionid=‘000406aa1b89461d8cfd8
5fb0e5d9e01‘\G
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near ‘expla
inselect optionid from options where optionid=‘000406aa1b89461d8cfd85fb0e5d‘ at
line 1
mysql> explain select optionid from options where optionid=‘000406aa1b89461d8cfd
85fb0e5d9e01‘\G    #explain分析语句
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: options
   partitions: NULL
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 122
          ref: const
         rows: 1
     filtered: 100.00
        Extra: Using index  #表示索引覆盖
1 row in set, 1 warning (0.03 sec)

mysql> explain select optioncontent from options where optionid=‘000406aa1b89461
d8cfd85fb0e5d9e01‘\G    #分析语句
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: options
   partitions: NULL
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 122
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.03 sec)

原文地址:https://www.cnblogs.com/qlqwjy/p/8593076.html

时间: 2024-11-09 01:55:52

【Mysql优化】索引覆盖的相关文章

MySQL优化--索引

一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询 时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上 已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100 倍. 假设我们创建了一个名为people的表: CREATE TABLE people

MySQL优化——索引

内容来自:https://yq.aliyun.com/articles/214494?utm_content=m_31338 对此我们来详细分析下(也就是大家在面试时需要说的): 场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大.当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于"性价比"不高. 场景二,某个商品表里有几百万条商品信息,同时每天会在一个时间点,往其中更新大概十万条左右的商品信息,现在用where语句查询特定商

MySQL优化思路,以及解决方案

mysql优化索引和配置,以及慢查询分析 s首先基本的思路 1)性能瓶颈定位 使用show命令. 慢查询日志. explain分析查询. profiling分析查询. 2)索引及查询优化 3)配置优化 MySQL数据库常见的两个瓶颈cpu.i/o: CPU主要在饱和的时候发生在数据装入内存或磁盘上读取数据的时候 i/o发生在装入数据远大于内存容量的时候,如果应用分布在网络上,那么查询量相当大的网络瓶颈,我们可以通过mpstat.iostat.vmstat.sar等命令查看系统的性能状态 例如:m

DB索引、索引覆盖、索引优化

###########索引########### @see   http://mp.weixin.qq.com/s/4W4iVOZHdMglk0F_Ikao7A 聚集索引(clustered index):聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引,一般用primary key来约束. 举例:t_user场景中,uid上的索引. 非聚集索引(non-clustered index):它并不决定数据在磁盘上的物理排序,索引上只包含被建立索引的数据,以及一个行定位符row-loca

MySQL的索引及其优化

前言 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多).如果对之建立B-Tree索引,则只需要进行log100(10

(2)mysql优化之使用索引优化查询

概述 ??索引是数据库优化中最常用的也是最重要的手段之一.该篇看看索引的分类,使用场景,不能使用的场景等. 索引分类 ??索引是在mysql存储引擎中实现的,而不是在服务器层实现的.索引每种存储引擎的索引不一定相同.mysql支持4种索引: B-tree索引:最常见索引,大部分引擎都支持B树索引. full-text索引:全文索引. hash索引:只有memory引擎支持. R-Tree索引:空间索引是myisam的一种特殊索引,使用比较少. 衍生索引:主键,唯一索引,组合索引,前缀索引等.ha

MySQL的索引优化,查询优化

MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等.

Mysql优化系列之索引性能

实际上,前面的数据类型和表结构设计优化不能算优化,只能算规范,也就是说在设计表的时候,应该且必须做到这些 索引是sql优化的核心部分,在<高性能Mysql>中单独抽出一章讲,也印证了其重要性.这一篇也会讲的很细致. 以下所讲,除少数的如全文索引之外,均以Innodb存储引擎为基本 一.索引是什么 索引,在Mysql中也叫做"键(key)",是存储引擎用于快速找到记录的一种数据结构. 这里我们注意到:索引是一种数据结构,节点是有序的,有大小,有时候一张表的索引甚至会有几个G的

30.5. MySQL用户,权限,服务器配置,查询缓存及优化,索引等

MySQL用户和权限管理 元数据数据库:mysql系统授权表:db, host, usercolumns_priv, tables_priv, procs_priv, proxies_priv 用户账号:'USERNAME'@'HOST' @'HOST': 主机名 IP地址或Network可用通配符: % _示例:172.16.%.% 用户管理 创建用户:CREATE USERCREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password']:默认权