美文网首页需要深入研究
存储结构,单索引,联合索引

存储结构,单索引,联合索引

作者: Nenezsnp | 来源:发表于2018-05-30 14:05 被阅读138次

转自:https://www.phpsong.com/586.html

MySQL单列索引和组合索引(联合索引)的区别详解

 MYSQL  2015-03-30 11:32:34  13697浏览  0评论

发现index merge局限性,优化器会自动判断是否使用 index merge 优化技术,查询还是需要组合索引【推荐阅读:对mysql使用索引的误解

MySQL单列索引和组合索引(联合索引)的区别详解

初始我写这篇文章的原因在于面试到一家大的游戏公司的时候,一个面试题

大致的内容是怎么加速这个where a=’1′ 和 where a=’1′ and b=’2′,当时我答题的时候回答的是a加索引,a和b加联合索引。

面试官跟我聊题目的时候说 where a=’1′ and b=’2′ 在加一个b的索引就好了,因为之前加过a的单列索引了,他很确定的告诉我,因为我没有测试过,所以没有反驳。在回去的路上我一直想不通,多个单列的索引和联合索引都一样的速度,联合索引还有什么用?

今天有空来做个试验,当然之前我已经查过资料了,为了确定一下

创建一个users表

CREATE TABLE `users` (

`userID` int(11) NOT NULL AUTO_INCREMENT,

`userName` varchar(20) NOT NULL,

`password` varchar(20) NOT NULL,

PRIMARY KEY (`userID`)

)

创建一个genUsers存储过程,用来模拟数据

delimiter $

create procedure genUsers()

begin

declare i int default 0;

while i < 100000 do

set i = i + 1;

insert into users(userID,userName,`password`) values(i,concat('username',i),concat('password',i));

end while;

end $

delimiter ;

执行存储过程

call genUsers();

复制表结构和数据

CREATE TABLE users2 SELECT * FROM users;

添加userName,password单列索引

alter table users add index userName(userName);

alter table users add index password(password);

select * from users where userName like 'username65%' and password like 'password65%'; 执行时间0.06 秒

alter table users2 add index userName_password(userName,password);

select * from users2 where userName like 'username65%' and password like 'password65%’;执行时间0.00秒

上面的结果每台机子测试的结果可能有所不同

原因是在mysql执行查询的时候,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。最左前缀:顾名思义,就是最左优先,打一比方

alter table users add index lname_fname_age(lname,fname,age);

创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)联合索引以及(lname,fname,age)联合索引。

QQ交流群:136351212(满) 455721967

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:

转载保留版权:小松博客» MySQL单列索引和组合索引(联合索引)的区别详解

本文链接地址:https://www.phpsong.com/586.html

相关文章

  • 存储结构,单索引,联合索引

    转自:https://www.phpsong.com/586.html MySQL单列索引和组合索引(联合索引)的...

  • 聚簇索引与非聚簇索引(也叫二级索引)

    区别 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据非聚簇索引:将数据存储于索引分开结构,索引结构的...

  • 一文带你深入理解Mysql索引底层数据结构与算法

    理解索引的特性 索引是帮助Mysql高效获取数据排好序的数据结构 索引是存储在文件里面的 索引的各种存储结构及优缺...

  • MySQL索引分类

    存储结构:B-Tree索引、Hash索引、FULLTEXT全文索引、R-Tree索引应用层次:普通索引、唯一索引、...

  • mysql 索引管理

    [TOC] 索引管理 按特定数据结构存储的数据 索引类型 聚集索引、非聚集索引: 数据是否与索引存储在一起 主键索...

  • 聚簇索引与非聚簇索引(也叫二级索引)

    通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引...

  • mysql索引专题考点总结

    聚集索引和非聚集索引的结构 [ 概念 ] 聚集索引, 非聚集索引, 回表 , 覆盖索引 索引用B+树存储, 假设索...

  • 聚集索引

    1.聚集索引 -聚集索引:是一种索引结构与数据一起存储的索引,类似字典的正文; -非聚集索引:是一种索引结构与数据...

  • MYSQL索引的概念

    一、什么是索引? 1、索引是帮助MYSQL高效获取数据的数据结构; 2、索引在存储引擎中实现,每种存储引擎的索引都...

  • 关于索引(1)

    什么是索引? 索引是存储引擎用于快速找到记录的一种数据结构,也就是说索引是种数据结构。在MySQL中,索引是在存储...

网友评论

    本文标题:存储结构,单索引,联合索引

    本文链接:https://www.haomeiwen.com/subject/hswtsftx.html