因此,我针对索引3行和这3行的唯一键做了一些测试。结果出乎我的意料。
CREATE TABLE locations (
locationid INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
country INT(2) NOT NULL,
state INT(2) NOT NULL,
city VARCHAR(64) NOT NULL,
INDEX(`country`),
INDEX(`state`),
INDEX(`city`)
);
vs
CREATE TABLE locations (
locationid INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
country INT(2) NOT NULL,
state INT(2) NOT NULL,
city VARCHAR(64) NOT NULL,
UNIQUE(`country`, `state`, `city`)
);
所以我试着做一些自动补全,我发现有3个索引的表比只有一个唯一键的表更快。自动完成sql看起来像...
<?php
$query = "SELECT state, city
FROM locations
WHERE city LIKE '$city%' and state=$state and country='US';";
$mysqli->query($query);
?>
我注意到上面的代码运行慢了一点,所以我去了mysql并尝试输入,平均来说,单个唯一键的运行速度大约是mysql的5倍……为什么?
发布于 2011-04-23 23:30:11
您的第一个示例是唯一的composite index。您的第二个示例包含三个非惟一索引。这是一个很大的区别。
要查看在这些情况下实际使用的是哪个索引,请在查询上运行EXPLAIN。
请记住,表中的行数和各个索引的基数/选择性也将决定是否使用索引。
发布于 2011-04-23 23:23:34
这是所有3个字段的索引
UNIQUE(`country`, `state`, `city`)
这是比3个字段上的3个索引更多的东西:
INDEX(`country`),
INDEX(`state`),
INDEX(`city`)
(我想您没有在合并的索引中使用索引)
https://stackoverflow.com/questions/5765017
复制相似问题