MySQL中SELECT *的一个问题
PHP中文网
PHP中文网 2017-04-17 11:44:38
[MySQL讨论组]

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

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

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
PHP中文网

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

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

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

  1. 找到可用索引(actor 索引)。
  2. 通过索引找到所有满足条件 actor='SEAN CARREY' 的聚簇索引,并得到一堆主键。
  3. 从主键拿到具体行数据,比较 title 条件并返回满足条件的数据。
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号