java面试题 --- MySQL③

1. 生产环境中一条 SQL 执行特别慢,你要如何排查问题?

  • 可以查看 SQL 的执行计划。

2. 执行计划怎么用?

  • explain 后面加上要执行的 SQL。

3. 执行计划包含了哪些信息?

  • id:执行计划的 id,可以看出各表的执行顺序;
  • select type:查询类型,simple 是简单查询,subquery 是子查询,primary 是子查询的外层,union 是连接查询,derived 是临时表;
  • type:访问类型,效率最好的是 system,表中只有一条记录;const次之,通过索引一次就找到了;eq_ref,唯一索引扫描,效率也很高;ref,非唯一索引扫描;range,用索引在范围内查找;index,全索引树扫描;all,性能最差,全表扫描;
  • possible key:可能用到的索引;
  • key:用到的索引;
  • extra:重要且不适合在其他列显示的信息,比如 using filesort 表示出现了文件内排序,性能十分差;using temporary 表示使用了临时表,性能也不好;using index 表示用了索引,性能还可以;impossible where,表示 where 后面的条件总是 false。

4. 一张表有千万级的数据,你怎么优化?

  • 建立适当的索引;
  • 使用缓存;
  • 做读写分离;
  • 垂直拆分,将字段多的表拆分成多张表;
  • 水平拆分,比如 id 为 1 到 50w 的放到第一张表,50w 到 100w 的放到第二张表。

5. 聚簇索引和非聚簇索引在查询数据时有什么区别?

  • 聚簇索引更快,因为叶子节点存放的是数据行,不需要回表查询。

6. 非聚簇索引一定要回表查询吗?

  • 不一定,正常情况是查到拿到叶子节点存储的主键的值,然后再根据主键值去做回表查询,但如果是索引覆盖的情况,就不需要回表查询了。

7. 什么叫索引覆盖?

  • 索引覆盖就是查询的字段都建了索引,数据可以直接从索引中获取,不需要查询数据表。

8. 使用索引有哪些优缺点?

  • 优点:提高检索效率,提高排序的效率;
  • 缺点:降低了写数据的效率,因为写数据的同时还要维护索引;索引也占用额外的空间。

9. 如果要对用户密码字段建索引,你打算建什么索引?

  • 密码字段可以用前缀索引,比如用密码字段的前 10 位做索引,因为前 10 位的标识度也够高了。前缀索引可以节省空间。

10. 创建联合索引的时候怎么确定哪个字段放前面?

  • 识别度最高的字段放到最前面,这样可以提高效率。

11. MySQL 5.6 开始对索引做了什么优化,了解吗?

  • 做了索引下推的优化,索引下推可以减少回表查询的次数。比如建立了联合索引 index(name, age),然后查询 select * from user where name like '张%' and age = 20,没有索引下推的话,MySQL 会把name like '张%'的数据都返回到 MySQL 服务端,服务端再去判断这些数据的 age 是否为 20;而有了索引下推的话,查询的时候会先判断 name like '张%' 的这些数据 age 是否为 20,不是的直接忽略。

12. 你认为哪些情况适合建索引?哪些情况不适合建索引?

  • 频繁作为查询条件的字段、排序字段、统计和分组的字段以及与其他表关联的字段应该建立索引;
  • 频繁更新的字段以及字段值大量重复的不适合建立索引。

13. 使用索引的时候你会遵循哪些原则?

  • 全值匹配是最理想的状态,即查询条件字段都建立了索引且顺序和索引顺序一致;
  • 遵循最左前缀法则,比如索引顺序是 A、B、C,那么查询条件一定要有 A,否则 B 和 C 都会失效;中间索引页不能断,如果查询条件是 A 和 C,少了 B,那么 C 也会失效;
  • 索引列上不要做任何计算,计算将导致索引失效;
  • 范围之后的列索引会失效,比如 name like '张% and age = 20',那么 age 这个索引将失效;
  • 写模糊查询时百分号要写右边,否则索引失效;
  • 不要写 select *,用到什么列就查什么列,这样可以增加索引覆盖的机率;
  • 不等于、is null、is not null、or 这些都会导致索引失效;
  • 字符串的引号不能漏写,否则索引会失效。

辅助记忆,诗曰:
全值匹配我最爱, 最左前缀要遵守;
带头大哥不能死, 中间兄弟不能断;
索引列上少计算, 范围之后全失效;
模糊百分写最右, 覆盖索引不写星;
不等空值还有或, 索引失效要少用;
字符引号不可丢, 牢记以上就无忧。

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

推荐阅读更多精彩内容