products
表有一个 actor
索引,title
无索引
SELECT * FROM products WHERE actor='SEAN CARREY'
AND title like '%APOLLO%';
上面的查询在MySQL中是
1.把表中所有行的所有数据都从存储引擎取到服务器再比较actor
和title
还是
2.只把所有行的所有actor
和title
从存储引擎取到服务器比较,再从存储引擎取出符合条件的行的所有数据
(看来题目中的例子和各种术语来自《高性能 MYSQL》第三版第 5 章第 3 节 172 页,跟我之前从字面上理解的差别很大,重新回答一下)
有一个重要的前提题目中没有提及,这里补上:products
表有一个 actor
索引,title
无索引。
所以,以 InnoDB 为例,MYSQL 的读取顺序是:
- 找到可用索引(
actor
索引)。 - 通过索引找到所有满足条件
actor='SEAN CARREY'
的聚簇索引,并得到一堆主键。 - 从主键拿到具体行数据,比较
title
条件并返回满足条件的数据。