8.2.1.7 Use of Index Extensions 使用索引扩展
来源:互联网 发布:朱文臣 的网络与 编辑:程序博客网 时间:2024/05/22 14:34
8.2.1.7 Use of Index Extensions 使用索引扩展InnoDB 自动扩展每个secondary index 通过添加primary key columns to it,考虑表定义如下:CREATE TABLE t1 ( i1 INT NOT NULL DEFAULT 0, i2 INT NOT NULL DEFAULT 0, d DATE DEFAULT NULL, PRIMARY KEY (i1, i2), INDEX k_d (d)) ENGINE = InnoDB;这个表定于了主键在列(i1,i2)上, 它也定义了一个secondary index k_d 在列(d)上,但是内部的InnoDB extends 这个index 对待为(d,i1,i2)在MySQL 5.6.9之前, 优化器不把主键列加进来 当确定如何和何时使用索引时。在5.6.9后, 优化器将主键列加进来优化器可以使用扩展secondary 索引用于ref,range和 index_merge index 访问,对松散索引扫描,对于join和排序操作,和min()/max()优化下面的例子显示使用扩展secondary 索引如何影响执行话,假设t1是填充下面记录:INSERT INTO t1 VALUES(1, 1, '1998-01-01'), (1, 2, '1999-01-01'),(1, 3, '2000-01-01'), (1, 4, '2001-01-01'),(1, 5, '2002-01-01'), (2, 1, '1998-01-01'),(2, 2, '1999-01-01'), (2, 3, '2000-01-01'),(2, 4, '2001-01-01'), (2, 5, '2002-01-01'),(3, 1, '1998-01-01'), (3, 2, '1999-01-01'),(3, 3, '2000-01-01'), (3, 4, '2001-01-01'),(3, 5, '2002-01-01'), (4, 1, '1998-01-01'),(4, 2, '1999-01-01'), (4, 3, '2000-01-01'),(4, 4, '2001-01-01'), (4, 5, '2002-01-01'),(5, 1, '1998-01-01'), (5, 2, '1999-01-01'),(5, 3, '2000-01-01'), (5, 4, '2001-01-01'),(5, 5, '2002-01-01');考虑下面的查询:EXPLAIN SELECT COUNT(*) FROM t1 WHERE i1 = 3 AND d = '2000-01-01'优化器不能使用主键 在这种情况下 因为包含列(i1,i2) 查询不涉及i2.相反, 优化器可以使用 secondary index k_d在(d)上,执行计划取决于 是否extentded 索引被使用当优化器不考虑index extensions,它对待index k_d 只作为(d)EXPLAIN 查询产生如下:mysql> EXPLAIN SELECT COUNT(*) FROM t1 WHERE i1 = 3 AND d = '2000-01-01'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: refpossible_keys: PRIMARY,k_d key: k_d key_len: 4 ref: const rows: 5 Extra: Using where; Using index当优化器考虑index 扩展,它对待k_d 作为(d,i1,i2) 在这种情况下,它可以使用最左索引前缀(d,i1) 来产生一个更好的执行计划mysql> EXPLAIN SELECT COUNT(*) FROM t1 WHERE i1 = 3 AND d = '2000-01-01'\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: t1 type: refpossible_keys: PRIMARY,k_d key: k_d key_len: 8 ref: const,const rows: 1 Extra: Using index在两种情况下,key 表明优化器会使用secondary index k_d 但是EXPLAIN 输出那些使用extentded index 改进1. key_len 从4字节到8字节,表明key 索引查询使用列d和i1,不只是d2. ref的值从 const to const,const 因为索引差尊使用2个索引部分,不是一个3.记录统计从5降低到1,表明InnoDB 需要检验更少的记录来产生结果集
0 0
- 8.2.1.7 Use of Index Extensions 索引扩展使用
- 8.2.1.7 Use of Index Extensions 使用索引扩展
- 8.2.1.7 Use of Index Extensions 索引扩展适用
- range check instead of index usage mysql索引使用注意
- Oracle索引(Index)创建使用
- Oracle索引(Index)的使用
- Oracle索引(Index)创建使用
- Oracle索引(Index)创建使用
- Oracle索引(Index)创建使用
- Oracle索引(Index)创建使用
- Oracle索引(Index)创建使用
- Writing Use Case Extensions
- Use Kotlin Android Extensions
- 使用use index优化sql查询
- 使用use index优化sql查询
- Chrome扩展开发入门 2.怎样使用Chrome Extensions API?
- 使用Kotlin开发Android 扩展函数(Extensions)
- 使用Index提示 强制使用索引
- web前端经常遇到的json数据的翻页处理
- UVa11732 Strcmp,Anyone?[Trie树]
- linux内核参数
- SpringBoot-JUnit
- 拒绝服务攻击与周边
- 8.2.1.7 Use of Index Extensions 使用索引扩展
- windows,linux下SVN实现自动更新WEB目录
- PC终端执行开发板上的图形界面程序时出错:Gtk-WARNING **: cannot open display:
- 【JAVA】JAVA线程及锁基础知识-niyuelin
- 从0开始学习 GitHub 系列之「02.加入 GitHub」
- Scala面向对象彻底精通及Spark源码阅读
- Android Priority Job Queue (Job Manager):后台线程任务结果传回前台(三)
- STM32 串口发送接收 带奇偶检验
- Unity脚本编程一:脚本,事件,组件