《高性能mysql》中某一节看不懂的部分希望大家能够给点意见

个人理解能力有限, 这本书看的总是感觉很多话理解不了

图中, 大部分时间花在数据拷贝上 什么意思啊? 然后什么缓存负载非常重要? 什么啊? 蒙了!

我看了半天认为 在查询字段有主键的时候, 二级索引可以做到覆盖到主键, 但图中第二句还是看不懂在说什么, 怎么就二次查询了??
clipboard.png

这句话感觉就是从天而降的一句话, 完全看不懂, 什么条件就为假了 看的晕乎?
clipboard.png

阅读 3.2k
3 个回答

举个用户表的栗子:

id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT
username CHAR(15) NOT NULL
password CHAR(15) NOT NULL
UNIQUE (username)

现在主键是id,索引是username,对于InnoDB来说实际上有两个索引:

id -> (username, password) // 以下称为PK
username -> id             // 以下称为UK

如果你这么查:SELECT id FROM user WHERE username = ...,那么MySQL只会查UK,而不会去查PK;
如果你这么查:SELECT id, password FROM user WHERE username = ...,那么MySQL会查一次UK,得到id后再查一次PK。

如果你要优化第二句,可以多加一个索引:


KEY (username, password)

这样就有:

(username, password) -> id // IDX

如果你再这么查:SELECT id, password FROM user WHERE username = ...,MySQL就只需要查IDX,而不用再查PK和UK了。

覆盖索引这块儿,楼主就按照@auntyellow的答案理解就行了,
理解到这个程度,如果你不是立志于成为DBA,说实话足够了。
这本书写得不错,但是我觉得不太适合数据库新手来看,因为里面有些语句晦涩难懂,如果对概念再不熟悉,容易被引入歧途,
我建议你看这本《MongoDB权威指南》,虽然这本讲解MongoDB,但是数据库都是想通的,比如这个“覆盖索引”还有你上午问的“列的选择性”,在这本书上都有详细并且易于理解的描述,看完这本你再来看高性能会好一些。

这本书很多人都说好 但是看着说起来怎么这么难理解

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题