原创转载请注明出处:http://agilestyle.iteye.com/blog/2433805
创建一个测试表
CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `a` varchar(32) NOT NULL, `b` varchar(32) NOT NULL, `c` varchar(64) NOT NULL, `d` varchar(128) NOT NULL, `e` varchar(256) NOT NULL, `create_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `update_time` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
插入数据
INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e'); INSERT INTO `test` (`a`, `b`, `c`, `d`, `e`) VALUES('a', 'b', 'c', 'd', 'e');
查看索引
show index from test;
查看执行计划
explain select * from test where id = "1";
explain select * from test where a = "1";
explain select * from test where b = "1";
explain select * from test where a = "1" and b = "1";
创建索引(a和b的联合索引)
create index idx_a_b on test(a, b);
查看索引
show index from test;
查看执行计划
explain select * from test where a = "1";
explain select * from test where b = "1";
explain select * from test where a = "1" and b = "1";
创建索引(b的索引)
create index idx_b on test(b);
查看索引
show index from test;
查看执行计划
explain select * from test where a = "1";
explain select * from test where b = "1";
explain select * from test where a = "1" and b = "1";
删除索引
drop index idx_a_b on test; drop index idx_b on test;
删除索引后,创建a, b, c 3个字段的联合索引
create index idx_a_b_c on test(a, b, c);
查看如下语句的执行计划
-- ref explain select * from test where a = "1"; -- all 扫全表 explain select * from test where b = "1"; -- all 扫全表 explain select * from test where c = "1"; -- ref explain select * from test where a = "1" and b = "1" and c = "1"; -- ref explain select * from test where a = "1" and b = "1"; -- ref explain select * from test where a = "1" and c = "1" -- all 扫全表 explain select * from test where b = "1" and c = "1"
相关推荐
之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。 什么时候创建组合索引? 当我们的where查询存在多个...
然而,如果查询条件只匹配了联合索引的部分左侧列,例如`SELECT * FROM test WHERE col2=“2”`,虽然最左匹配原则不完全满足,但MySQL依然能够使用索引的部分,这被称为“部分索引匹配”。在这种情况下,MySQL会...
MySQL索引最左原则是指在MySQL数据库中,利用复合索引时,查询条件要尽量匹配索引的最左边字段,这样才能有效地利用索引,加快查询速度。理解最左原则对于优化数据库查询性能至关重要。 首先,当我们创建复合索引时...
mysql-实用-索引失效和优化原则
在最左前缀匹配原则下,如果查询条件匹配索引的最左边一列或多列,数据库可以利用该索引。在示例SQL中,创建一个包含`status`, `operator_id`, `type`, `operate_time`的联合索引,并且考虑到`operate_time`的范围...
在 MySQL 中,联合索引的建立遵循最左匹配原则,也就是说,索引的建立顺序是从左到右的。例如,在一张表 test 中建立了联合索引(a,b,c),使用下面的 SQL 语句问那些语句用到了索引?根据索引的最左匹配原则,...
2. **MySQL索引的优缺点和使用原则**: - **优点**:可以给任何列创建索引,提升查询速度。 - **缺点**:创建和维护索引需要时间,占用额外存储空间,且影响数据的增删改操作速度。 使用索引时应遵循一定的原则...
MySQL中的索引是一种提高...总结起来,MySQL的多条件索引利用了最左前缀原则,提高了复杂查询的执行速度,但设计合理的索引结构和顺序至关重要。通过理解这些原理,我们可以更有效地优化数据库,提升系统的整体性能。
从数据结构底层实现,阐述B树、B+树的特点,到mysql为什么选择了B+树作为...最后列举一些sql是否可走索引,涉及最左匹配原则、索引覆盖、范围查询等原则,以及sql优化建议。 笔者使用此ppt分享,取得了较好的现场效果。
但是,需要注意组合索引的左边匹配原则,即组合索引的前面字段需要被使用,否则索引不会被命中。 3. LIKE 语句:使用 LIKE 语句时,如果“%”放在前面,则一定不能命中索引。 实践例子 使用 uvip_uc_user 表作为...
**分析**:此查询会利用联合索引`sname,s_code,address`中的`sname`部分,符合最左匹配原则,因此会使用索引。 2. **查询语句**: ```sql SELECT create_time FROM student WHERE s_code = 1; ``` **分析**:...
对于多列索引,数据库会首先根据最左前缀原则使用最左侧的列进行索引查找,然后逐列进行匹配。 索引虽然能提高查询效率,但也会占用额外的存储空间,并在插入、删除和更新记录时增加开销。因此,合理地设计和使用...
复合索引遵循最左前缀匹配原则,即在查询时必须从左到右匹配索引的列。 3. 唯一索引 唯一索引是指索引列的值必须唯一,但允许有空值。唯一索引可以确保数据的唯一性。 4. 全文索引 全文索引是在 MySQL 5.6 版本...
7. **最左前缀原则** - 在复合索引中,查询会从左到右匹配索引,如果中间有列未出现在查询条件中,右侧的列将不会被使用。 8. **索引失效情况** - 使用`OR`连接不同列时,如果没有单个索引包含所有列,可能会导致...
使用时需遵循最左原则,即查询时应按索引列的顺序从左到右匹配。创建复合索引的方法与创建普通索引类似,只是涉及多个列。 5. 全文索引:用于解决大数据量的模糊查询问题。它通过分词技术建立索引,提高搜索效率。...
内容概要:本文详细解释了 MySQL 中联合索引的概念,包括联合索引的定义、索引构建原理、最左匹配原则,以及使用联合索引的实际案例。同时介绍了在创建与删除联合索引方面的具体操作步骤和技术细节,探讨了何时使用...