mysql索引

mysql支持的索引

索引是在存储引擎层实现。而不是在mysql内实现

  • B-tree索引

index 普通索引 没有限制
primary 主键索引 必须唯一,且不能为空
unique key 唯一索引 必须唯一
index 前缀索引
当索引的字段长度很大,则使用前缀索引,使用更少的空间,并综合索引的选择性,达到平衡。

//如下面。根据字段列的长度,进行统计
select count(*) as cnt,left(city,7) as pref from city group by pref order by cnt desc limit 10
//计算索引选择性
select count(distinct left(city,7))/count(*) from city
//添加索引
alter table tablename add key (keyname(length))
alter table country add key(country(3))

B-tree索引

特点

  1. B-tree 索引是以B+树结构存储数据
  2. B-tree 索引能够加快数据的查询速度
  3. B-tree索引适合进行范围查找 索引是顺序存储的

在什么情况下使用到了b-tree索引

  • 全值匹配的查询
  • 匹配最左前缀的查询
  • 匹配列前缀查询
  • 匹配范围值查找
  • 精确匹配左前列并范围匹配另外一列
  • 只访问索引的查询

B-tree索引的限制

  • 如果不是按照最左列开始查找,则无法使用索引
  • 使用索引时不能跳过索引中的列
  • not in 和<> 操作无法使用索引
  • 如果查询中有某个列的范围查询,则其右边所有的列都无法使用索引

Hash 索引

特点

  • 基于hash表实现的,只有查询条件精确匹配hash索引中所有列才能使用到hash索引
  • 对于hash索引中的所有列,存储引擎都会为每一行计算一个hash码,hash索引中存储的就是hash码

限制

  • hash索引必须进行二次查询
  • hash索引无法用于排序
  • hash索引无法用于范围查找也不支持部分索引查找
  • hash索引中hash码的计算可能存在hash冲突

使用索引的好处

  • 索引可以减少存储引擎需要扫描数据量
  • 索引可以帮助排序,避免使用临时表
  • 索引可以把随机io变为顺序io

索引会增加写操作的成本
过多的索引会增加查询优化器的选择时间


索引的优化策略

索引列上不能使用表达式或者函数

前缀索引和索引列的选择性

联合索引

列的顺序选择

  • 经常被使用的列优先
  • 列的选择性高的优先
  • 宽度小的列优先

覆盖索引

在btree索引上直接获得查询中所需数据

  • 可以优化缓存,减少磁盘io操作
  • 可以减少随机io,变随机io为顺序io
  • 可以避免对innodb主键索引的二次查询
  • 可以避免myisam表进行系统调用

无法使用覆盖索引

  • 存储引擎不支持覆盖索引
  • 查询中使用了太多的列
  • 使用了双%的like查询 双%无法使用索引

聚簇索引

聚簇索引是一种数据的存储方式。聚簇表示数据行和相邻的键值紧凑地存储在一起。innodb是通过主键聚集数据

优点

  • 可以把相关的数据保存在一起
  • 数据访问更快
  • 使用索引覆盖扫描查询时,可以直接使用页节点中的主键值

缺点

  • 聚簇索引最大限度地提升了io密集型的性能,但是如果数据都放入内存,则访问的顺序并没有那么重要
  • 插入的速度严重依赖于插入的顺序
  • 更新的代价很高,会强制innodb把被更新的行移动到新位置
  • 基于聚簇索引的表,在插入新行,或者主键被更新导致需要移动行时,可能会导致页分裂
  • 聚簇索引可能导致全表扫描变慢
  • 二级索引会比想象的大,因为在二级索引中含有主键
  • 二级索引需要两次访问,而不是一次
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容