【发布时间】:2012-08-20 14:29:19
【问题描述】:
表定义,注意UNIQUE索引:
CREATE TABLE meta
(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
type SET('tag', 'keyword') NOT NULL,
name VARCHAR(255) NOT NULL,
user_id INT UNSIGNED NOT NULL,
UNIQUE (name, type, user_id),
FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE
);
所以 MySQL 应该在像 WHERE name = 'tag' and type = 'cat' 这样的搜索中使用索引,以及只使用(最左边的前缀)WHERE type = 'tag'。
我做到了:
EXPLAIN SELECT * FROM meta WHERE type = 'tag'
结果是(第五列是possible_keys):
'1', 'SIMPLE', 'meta', 'ALL', NULL, NULL, NULL, NULL, '1', 'Using where'
我确定我错过了什么,但找不到什么。有什么线索吗?
【问题讨论】:
-
MySQL 并不总是使用索引,即使它们可用。有时进行表扫描比命中索引更快,例如当表中的数据很少时。
-
@MarcB 哦,我明白了。那么,我是否应该添加一些随机数据来检查是否会使用索引?
标签: mysql indexing database-indexes