我有一个表 't_table1' 包括 3 个字段:
`field1` tinyint(1) unsigned default NULL,
`field2` tinyint(1) unsigned default NULL,
`field3` tinyint(1) unsigned NOT NULL default ’0′,
和一个索引:
KEY `t_table1_index1` (`field1`,`field2`,`field3`),
当我运行这个 SQL1 时:
EXPLAIN SELECT * FROM table1 AS c WHERE c.field1 = 1 AND c.field2 = 0 AND c.field3 = 0
然后是显示:
Select type: Simple
tyle: All
possible key: t_table1_index1
key: NULL
key_len: NULL
rows: 1042
extra: Using where
我认为它说我的索引在这种情况下没用。
但是当我运行这个 SQL2 时:
EXPLAIN SELECT * FROM table1 AS c WHERE c.field1 = 1 AND c.field2 = 1 AND c.field3 = 1
表明:
Select type: Simple
tyle: ref
possible key: t_table1_index1
key: t_table1_index1
key_len: 5
ref: const, const, const
rows: 1
extra: Using where
这种情况下它使用了我的索引。所以请为我解释一下:
为什么 SQL1 不能使用索引?
使用 SQL1,我如何编辑索引或重写 SQL 以更快地执行?
谢谢 !