mysql 索引

1.索引

B*Tree索引 

b-tree -> b+tree(建立叶节点的双向连接) -> b*tree (建立叶节点和枝节点的双向连接)

聚簇索引B*tree 结构(Innodb独有)

簇?

区 extent ====>簇===>64个pages ===》1M

作用:有了聚簇索引之后,将来插入的数据行,在同一个区内,都会按照id值得顺序,有序的存储在磁盘上。

mysql innodb表 聚簇索引组织存储数据表

构建前提:

建表时:指定了主键列,mysql innodb会将主键作为聚簇索引列

没有指定主键,自动选择唯一(unique)的列,作为聚簇索引

以上都没有,生成隐藏聚簇索引

画图说明聚簇索引  


辅助索引btree结构:

说明:使用普通列作为条件构建的索引,需要认为创建

作用:非聚簇索引列之外的查询条件的优化

图解


辅助索引一般需要回表,也就是回到聚簇索引进行查询.

辅助索引分类:

单列索引:name

联合索引:

使用多列构建同一个索引

联合索引,注意最左原则 idx(a,b,c)

查询条件中,必须包含最左列 ,也就是a列

建立联合索引时,一定要选择重复值最少的列,作为最左列,

这样能筛选到最少的数据页.

全部覆盖:

select * from t1 where a =  and b= and c = 

select *from t1 where a= 

select *from t1 where a= and c =  c的索引不能走

select * from t1 where a=  and b > < >= <= like and c =   由于b出现了不等值的情况,

所以c的所以也不能走  

select xxx from t1 where  b order by a  不能走索引


前缀索引:

前缀索引是针对于,我们所选择的索引列值长度过长,会导致

索引的高度增高,导致需要读取更多的数据页,mysql中索引树高度3-4层。

所以可以选择大字段的前面部分字符作为索引的生成条件。

4 b+tree索引高度影响因素

1.索引字段较长:前缀索引

2.数据行过多 : 分区表,归档表(pt-archive),分布式架构

3.数据类型:变长使用vachar,选择合适的数据类型。


索引的管理命令

什么时候创建索引:

按照业务语句的需求创建合适的索引,并不是将所有的列都创建索引。

索引不是越多越好.

将索引建立在,经常where group by order by join on ....的条件.

为什么不能乱建索引?

如果冗余过多,表的数据变化时,很有可能导致索引频繁更新,会阻塞业务的

正常更新需求。

2.索引过多,会导致优化器的选择出现偏差。

管理命令:

建立索引:

查询表的索引情况: 

desc city;

key pri聚簇索引 mul辅助索引 uni 唯一索引

show index from  city;

添加索引

alter table city add index idx_na(name);

删除索引

alter table city drop index idx_na;

压力测试 

我这里有一张200万的表,用mysql工具进行压力测试;

mysqlslap --defaults-file=/etc/my.cnf \

--concurrency=50 --iterations=1 --create-schema='world' \

--query="select * from world.test1 where name='刘备999' " engine=innodb \

--number-of-queries=100 -uroot -pluobiao123 -verbose

备注:concurrency 代表用户  number-of-queries 代表执行次数 ,下面是花费时间:

Benchmark

Running for engine rbose

Average number of seconds to run all queries: 102.955 seconds

Minimum number of seconds to run all queries: 102.955 seconds

Maximum number of seconds to run all queries: 102.955 seconds

Number of clients running queries: 50

Average number of queries per client: 2

可以看到用了102秒 

下面创建索引再次执行: alter table world.test1 add index idx_na(name);

结果如下:

Benchmark

Running for engine rbose

Average number of seconds to run all queries: 0.026 seconds

Minimum number of seconds to run all queries: 0.026 seconds

Maximum number of seconds to run all queries: 0.026 seconds

Number of clients running queries: 50

Average number of queries per client: 2

共花费0.026秒,效率提升3923倍.


--创建联合索引

alter table city add index idx_c_n(name,countrycode);

--创建前缀索引

alter table city add index idx_du(district(5));--截取前5位

回表带来的影响:

1.oi量级变大

2.oips增大

3.随机io会增大

怎么减少回表

1.将查询尽量可能用主键进行查询

2.设计理想的合理的联合索引

3.更精确的查询条件+联合索引

4.优化器的算法:MRR

跟新数据时,会对索引有影响吗? 数据的变化索引会实时更新吗?

例如 insert  一行数据  

对于聚簇索引会立即更新。

对于辅助索引,不是实时更新的。

在innodb内存机构中加入了 insert buffer(会话),现在叫change buffer。

change buffer的功能是临时缓冲辅助索引需要的数据更新。

当我们需要查询新insert 数据,会在内存中进行merge(合并)操作,此时辅助索引就是最新的。

问题3:双11是怎么搞的,数据库?

提前1-2周将热点商品数据,灌入到tair(reidis)集群中.

KAFKA,核心:队列加缓存.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。比如,InnoDB的聚簇索引使用B+Tree的数据结构存储...
    sherlock_6981阅读 1,862评论 0 2
  • 聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。比如,InnoDB的聚簇索引使用B+Tree的数据结构存储...
    大头8086阅读 17,480评论 7 40
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 2,919评论 0 8
  • 先来看个问题 假设现在有100000条从0到10000且从大到小排列的整型数据,1条数据的大小假设(真的只是假设)...
    kindol阅读 532评论 0 2
  • 我问睡莲:“睡莲,睡莲,你为什么这么好看?”睡莲回答我说:“绽放、绽放,尽管尽情绽放!”新一周的工作开始了,一切清...
    小胖儿_5b80阅读 184评论 0 1