- 论坛徽章:
- 1
|
从内部理解是很辛苦的。
我从全局去理解松散和紧凑索引
松散,只要scan一部分的group_id,就可以找到你要的数据
紧凑,需要scan全部的group_id,才能找你你要的数据
例子:
EXPLAIN SELECT actor_id, MAX(film_id)
FROM film_actor
Where actor_id <102
GROUP BY actor_id\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: film_actor
type: range
possible_keys: NULL
key: idx_actor_film_id
key_len: 4
ref: NULL
rows: 1004
Extra: Using index for group-by
1 row in set (0.00 sec)
EXPLAIN SELECT actor_id, MAX(film_id)
FROM film_actor
Where actor_id =101
GROUP BY actor_id\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: film_actor
type: ref
possible_keys: idx_actor_film_id
key: idx_actor_film_id
key_len: 4
ref: const
rows: 4095
Extra: Using index
1 row in set (0.00 sec)
我这里示例的数据就是actor_id=101和102的相关数据。
明显可以看出,松散只找了1004行
而紧凑找了4095行
我认为这是它们比较明显的区别,也可以看出松散比紧凑快。
至于算法是如何实现的?数据结构的BTree树是怎样的?还没有时间去理解和深究,如有高手出来,说出一二。
或者反驳我的观点,我非常开心,以上是我的愚见。 |
|