这是我的查询和解释输出。
explain select * from ENSEMBL_DERIVED where
SEQ_REGION_ID=27523 AND SEQ_REGION_START >= 12595527 AND SEQ_REGION_END <= 43811979
--------------
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: ENSEMBL_DERIVED
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: NULL
rows: 2004
Extra: Using where
1 row in set (0.00 sec)
这是表格:
describe ENSEMBL_DERIVED
--------------
+-------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| SEQ_REGION_ID | int(10) unsigned | NO | PRI | 0 | |
| SEQ_REGION_START | int(10) unsigned | NO | PRI | 0 | |
| SEQ_REGION_END | int(10) unsigned | NO | PRI | 0 | |
| SEQ_REGION_STRAND | tinyint(2) | YES | | NULL | |
| STABLE_ID | varchar(128) | YES | | NULL | |
| DISPLAY_LABEL | varchar(128) | YES | MUL | NULL | |
+-------------------+------------------+------+-----+---------+-------+
解释语句中的key_len字段表示主键的 3 列中只有 2 列正在使用。为什么是这样?这是在两个不同列上使用 >= 和 <= 运算符的症状吗?
有没有办法优化查询+表?我认为,在 2004 行上“使用 where”可能并不理想。