MySQL优化知识点总结

前言

这篇博文是对尚硅谷MySQL高级课程的总结。

一、存储引擎简介

TIM截图20180719190854.png

二、JOIN语句总结

2015813152628267.png

其中因为MySQL没有外链接,所以外链接部分的SQL语句和图中的有区别,下面是上图中第五个图的SQL语句:

select * from tablea a left join tableb b on a.key = b.key
union 
select * from tablea a right join tableb b on a.key = b.key

第六个图的SQL语句:

select * from tablea a left join tableb b on a.key = b.key where b.key is null
union 
select * from tablea a right join tableb b on a.key = b.key where a.key is null

三、索引

1、什么是索引?

MySQL官方对索引的定义为:索引是帮助MySQL高速获取数据的数据结构,可以简单理解为,索引就是一种排好序的快速查找数据的数据结构

2、MySQL中的索引是哪种数据结构?

MySQL中的索引,如果没有特别指明,都是指B+树,除了B+树这种索引外,还有哈希索引等。

3、索引的优点和缺点

既然索引是一种排好序的可以快速查找数据的数据结构,那么我想优点也就很明确了,那就是可以使用索引快速的查找到想找的数据,并且可以借助索引快速的排序,这里我还是希望不懂数据结构的可以去查查相关的资料,毕竟数据结构是比较抽象的,如果之前没有听说过肯定会想知道为啥用了数据结构就可以快速的排序和查找了,这里可以好好学习一下树这种数据结构,然后你就会豁然开朗。
索引的缺点就是索引本身会占用空间,并且会降低insert、update、delete操作的性能,因为当表改动时,索引也会发生改变,索引的改变也会消耗时间,所以对于经常增删改的表并不适合创建索引。

4、索引的种类

  • 单值索引:一个索引只包含一个列,一个表可以有多个单值索引,创建索引的语法:
第一种
CREATE INDEX indexName ON tableName(columnName);
第二种
ALTER table tableName ADD INDEX indexName(columnName);
  • 唯一索引:索引列的值必须唯一,但是可以为空,创建索引的语法:
第一种
CREATE UNIQUE INDEX indexName ON tableName(columnName);
第二种
ALTER table tableName ADD UNIQUE [indexName] (columnName);
  • 复合索引:一个索引包含多个列,创建索引的语法:
第一种
CREATE INDEX indexName ON tableName(columnName1, columnName2);
第二种
ALTER table tableName ADD INDEX indexName(columnName1, columnName2);

删除索引的语法:

drop index [indexName] on tableName;

查看索引的语法:

show index from tableName;

5、创建索引的一些建议

  • 主键自动创建唯一索引
  • 频繁作为查询条件的字段应该创建索引
  • 查询中与其他表关联的字段,比如外键需要建立索引
  • 频繁更新的字段不适合创建索引
  • where条件中用不到的字段不创建索引
  • 在高并发下倾向于创建组合索引
  • 需要排序的字段创建索引会大大提高排序的速度
  • 查询中的统计或分组字段需要创建索引
  • 表中数据很少的情况下不推荐创建索引
  • 经常增删改的表不适合创建索引
  • 数据重复且平均分配的表字段不适合创建索引

6、学一一下怎么怎么使用explain分析SQL性能

我们在学习如何创建高效的索引之前需要先学习一下怎么分析SQL的性能,要不我们怎么知道创建索引后是不是比以前快了很多,或者我们如何知道一条SQL是否用到了我们创建的索引,这些我们就需要使用explain命令,这里就给出一个博客,博客中有很详细的教程:MySQL 性能优化神器 Explain 使用分析

7、如何创建高效的索引

其实只要我们创建的索引在查询和排序时能够被用上,那么这个索引就是一个成功的索引,我们学习如何创建高效的索引其实就是学习如何创建一个不会失效的索引,我们以下索引为例:

CREATE INDEX indexName ON tableName(a, b, c);

索引的使用分为排序和查找,下面的规则适合于查找,也就是where子句中:

  • 尽量使用全部全值匹配,例如where a=1 and b=2 and c=3,顺序可以打乱,但是最好按照索引的顺序进行查找。
  • 最佳左前缀法则:如果是复合索引,查询从索引的最左前列开始,不跳过索引中的列
  • 不在索引列上进行任何操作(计算、函数、类型转换)
  • 尽量不要使用select *,尽量只查询索引中的列这里就是select a,b,c
  • 不要使用!=或者<>,会导致索引失效
  • is nullis not null会导致索引失效
  • 如果使用like,不要在查询目标前加%,例如%abcd、%das%,可是使用dasd%,但是会使复合索引中的一部分失效。
  • 字符串类型的查找值一定要加单引号(重点)
  • 少用or,用它来连接时会使索引失效

下面是排序时的规则,也就是用在order by 子句中:

  • 同样是最佳左前缀法则:如果是复合索引,排序条件从索引的最左前列开始,不跳过索引中的列
  • 如果前面的where子句中使用了最左前缀,并且是用的=来限定条件,那么order by中就可以越过最左前缀,直接使用后面的索引来作为排序条件,例如:where a=123 order by b,c

当使用group by子句时,和使用order by子句的规则相同。

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