【发布时间】:2013-08-12 08:07:05
【问题描述】:
假设您有这样的查询,
select ID, REGION, START, END from COORD_SYSTEM
where REGION=? and TYPE=? and START >= ? and END <= ?;
假设这个表有大约 50,000 行。 REGION 列有 500 个不同的值,TYPE 列有 50 个不同的值。 ID 列是主键。
索引表的最佳方法是什么?由于 >= 和 覆盖索引。这里有几个选项:
- 在 COORD_SYSTEM (REGION, TYPE) 上创建索引
- 在 COORD_SYSTEM(REGION、TYPE、START)上创建索引
- 在 COORD_SYSTEM(REGION、TYPE、START、END)上创建索引
更新 - 这是解释语句:
id: 1
select_type: SIMPLE
table: COORD_SYSTEM
type: range
possible_keys: indx_A
key: indx_A
key_len: 50
ref: NULL
rows: 590
Extra: Using where
1 row in set (0.00 sec)
【问题讨论】:
-
我想说3应该更好,你有没有在一些有大量行的测试数据上试过?
-
使用选项 3 它应该只能在索引上运行。选项 2 和 3 也应该具有相同数量的扫描行。你能发布解释的吗?
-
你试过
create index on COORD_SYSTEM (REGION, TYPE, START, END desc)吗?? -
select_type信息不够,请告诉我们Extra列中的值(最后一列) -
@RandomSeed 确定我添加了说明语句。
标签: mysql