首页 > MySQL中SELECT *的一个问题

MySQL中SELECT *的一个问题

products 表有一个 actor 索引,title 无索引

SELECT * FROM products WHERE actor='SEAN CARREY' 
AND title like '%APOLLO%';

上面的查询在MySQL中是
1.把表中所有行的所有数据都从存储引擎取到服务器再比较actortitle
还是
2.只把所有行的所有actortitle从存储引擎取到服务器比较,再从存储引擎取出符合条件的行的所有数据


(看来题目中的例子和各种术语来自《高性能 MYSQL》第三版第 5 章第 3 节 172 页,跟我之前从字面上理解的差别很大,重新回答一下)

有一个重要的前提题目中没有提及,这里补上:products 表有一个 actor 索引,title 无索引。

所以,以 InnoDB 为例,MYSQL 的读取顺序是:

  1. 找到可用索引(actor 索引)。
  2. 通过索引找到所有满足条件 actor='SEAN CARREY' 的聚簇索引,并得到一堆主键。
  3. 从主键拿到具体行数据,比较 title 条件并返回满足条件的数据。
【热门文章】
【热门文章】