示例
示例
-- 用区分度选长度
SELECT COUNT(DISTINCT LEFT(url, 10)) / COUNT(*) AS sel10,
COUNT(DISTINCT LEFT(url, 20)) / COUNT(*) AS sel20,
COUNT(DISTINCT url) / COUNT(*) AS sel_full
FROM pages;
ALTER TABLE pages ADD INDEX idx_url20 (url(20));
EXPLAIN SELECT id FROM pages WHERE url = 'https://example.com/a';
-- key: idx_url20;先定位候选再回表核对完整值| 区分度 | N 越大区分度越高、索引越大;常用 10/20/50 做对比 |
|---|---|
| 限制 | 前缀索引不能用于覆盖索引,也不能完整支撑 ORDER BY |
| PostgreSQL | 无前缀索引语法;普通 B 树可处理前缀匹配,长文本模糊匹配可借助 pg_trgm |