今天在做查询优化时,碰到了一个问题:百万级别的索引查询时,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 2021-01-20 17:03:44 +08:00
session_id 要回表
|
2
tokyo2020 2021-01-20 17:05:50 +08:00
应该是索引有关? 1,主键就直接返回了 2,session_id 还需要再找到 session_id 的位置再返回 ?
|
4
fhsan 2021-01-20 17:13:10 +08:00
什么是回表查询?
什么是索引覆盖? 如何实现索引覆盖? |
5
chendy 2021-01-20 17:40:56 +08:00
这么离谱的差距…
盲猜 id 是个数字,session_id 是个挺长的字符串,查询返回的数据量又大,网络瓶颈导致等了那么久…… |
7
fengpan567 2021-01-20 17:52:18 +08:00
id 是也有聚簇索引的,不用回表查询
|
8
geekzhu 2021-01-20 18:13:58 +08:00
session_id 和 path_type 是一个索引吗
|
9
Hurriance 2021-01-20 18:16:38 +08:00
楼主可以贴一下 table 的 DDL
|
10
zhangysh1995 2021-01-21 13:44:16 +08:00
贴 show create table
|