8.2.1.7 Use of Index Extensions 索引扩展使用
来源:互联网 发布:大数据专业 编辑:程序博客网 时间:2024/06/07 18:32
8.2.1.7 Use of Index Extensions 索引扩展使用
InnoDB 会自动扩展每个2级的index 通过主键列:
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),也定义了第2个索引 k_d 在d列上,但内部的InnoDB 扩展这个索引,把它对待成(d,i1,i2)
就是索引k_d在d列上,会扩展把主键的列加入
作为5.6.9,优化器将主键列进去,从而更有效的查询执行计划和更好的性能
优化器可以使用扩展的2级索引作为参考, range和index_merge 索引访问, 对于松散的索引扫描,对于join和排序优化,min和max优化
下面的示例演示执行计划被影响通过优化器是否使用extened 2级索引:
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’);
Now consider this query:
EXPLAIN SELECT COUNT(*) FROM t1 WHERE i1 = 3 AND d = ‘2000-01-01’
优化器不能使用主键在这种情况下, 包括列(i1,i2),查询不指向i2,相反,优化器可以使用第2个索引 k_d 在(d)列上,
执行计划依赖是否扩展索引被使用:
当优化器不考虑索引扩展, 它将索引k_d 只作为(d)列,解释查询产生这个结果
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: ref
possible_keys: PRIMARY,k_d
key: k_d
key_len: 4
ref: const
rows: 5
Extra: Using where; Using index
当优化器需要让Index 扩展,它对待k_id 作为(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: ref
possible_keys: PRIMARY,k_d
key: k_d
key_len: 8
ref: const,const
rows: 1
Extra: Using index
在这两种情况下, key表明优化器使用secondary 索引k_id,但是输出显示 那些改善从使用扩展索引来改善。 1.key_len 从4个字节到8个字节, 表明key 查找使用列d和i1,不只是d. 2.从const常量的参考值的变化,const因为重点查找使用的关键部分,而不是一个。 3.行数从5降到1,表明InnoDB 需要检测较小的行来产生结果。 4. 额外的值改变,使用index 来使用索引,这个意味着 记录可以只读取索引, 而不使用访问数据记录。
- 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提示 强制使用索引
- ListView,GridView和ScrollView设置初始间距不影响滚动。
- 通过OpenSSL获取证书扩展属性之一:“基本约束”
- 将Gradle项目发布到maven仓库
- 模糊背景处理--当前界面背景
- 【HDU4725】【建模dij】【新建虚拟节点 每层一个出口和入口】
- 8.2.1.7 Use of Index Extensions 索引扩展使用
- Extjs grid select 选取行内容
- UVA_10271_Chopsticks
- Linux常用指令
- IOS集成支付宝回调的坑
- 利用栈判断链表是否为回文
- 利用runtime检测这个对象是否存在某属性?
- Android 中的 EditText
- 【iOS】苹果,百度Map定位使用与总结