MySQL索引面试题

1. 如何做SQL优化

1.1 定位慢SQL

开启慢查询

slow_query_log = 1

long_query_time = x(s)

1.2 优化

1.2.1 查询优化

指定具体列代替*

1.2.2 索引优化

使用explain查看执行情况, 查看索引是否生效

利用覆盖索引

1.2.3 join优化

避免多表join

小表驱动大表, 因为小表会被遍历连接大表, 为了减少连接次数

增加冗余字段

分页优化

limit id
延迟关联
跳转链接

 

2. explain中各个字段代表什么

id: 每个select语句都会分配一个id

select_type: 查询类型

table: 查询的表

possible_keys: 可能用的索引

key: 实际用到的索引

key_len: 索引长度

rows: 估算要读取的行数

extra: Using index(代表使用了覆盖索引), Using where(表示在存储引擎中筛选了数据), Using temporary(使用了临时表)

type:

  • system, const: 非常快, 是唯一索引的常量 等值 查询
  • eq_ref: 联表查询使用唯一索引
  • ref: 非唯一索引单表或联表
  • ref_or_null: 类似ref, 可以搜索值为null的行
  • range: 索引使用了范围查询(> < between, in...)
  • index: 遍历了索引树
  • all: 全表扫描

 

3. 创建索引需要注意哪些

不能过多, 因为维护索引需要占用存储空间

经常变化的列不能创建索引, 因为会导致索引结构的变化

多条件查询可以创建联合索引

无序的列尽量不创建索引, 因为会导致页分裂, 页合并

 

4. 索引失效

最左匹配

索引列的运算

!=

< > 之后的列

%在前

字符串不加单引号

order by group by

 

5. 为什用B+不用B

B+数据存在叶子节点中, 每一层能存更多的节点和指针

B+的叶子节点是链表形式的, 更好的范围查询和排序

 

6. Hash索引和B+的区别

B+支持范围查询, hash不支持

B+支持排序, hash不支持

B+支持模糊查询, hash不支持

hash等值查询效率高

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇