
今天在做查询优化时,碰到了一个问题:百万级别的索引查询时,SELECT id(主键) 与 SELECT session_id(普通索引) 的查询速度差了一大截,EXPLAIN 的剖析结果两条查询语句是一致的。
SQL1 SELECT id FROM table WHERE path_type='products'; // 耗时 0.5s 左右
SQL2 SELECT session_id FROM table WHERE path_type='products'; // 耗时 7s 左右
EXPLAIN 两个 SQL 相同 1 SIMPLE statistics_page_visits ref statistics_page_visits_path_type_index statistics_page_visits_path_type_index 1023 const 1144028 100.00 Using index
请问造成以上结果的原因是什么 @_@ 晕乎
1 zoharSoul Jan 20, 2021 session_id 要回表 |
2 tokyo2020 Jan 20, 2021 应该是索引有关? 1,主键就直接返回了 2,session_id 还需要再找到 session_id 的位置再返回 ? |
4 fhsan Jan 20, 2021 什么是回表查询? 什么是索引覆盖? 如何实现索引覆盖? |
5 chendy Jan 20, 2021 这么离谱的差距… 盲猜 id 是个数字,session_id 是个挺长的字符串,查询返回的数据量又大,网络瓶颈导致等了那么久…… |
7 fengpan567 Jan 20, 2021 id 是也有聚簇索引的,不用回表查询 |
8 geekzhu Jan 20, 2021 session_id 和 path_type 是一个索引吗 |
9 Hurriance Jan 20, 2021 楼主可以贴一下 table 的 DDL |
10 zhangysh1995 Jan 21, 2021 贴 show create table |