所以我针对这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并尝试输入,平均而言,单个唯一键的运行速度大约是5倍......为什么?
答案 0 :(得分:0)
这是所有3个字段的索引
UNIQUE(`country`, `state`, `city`)
这是3个字段上的3个索引:
INDEX(`country`),
INDEX(`state`),
INDEX(`city`)
(我猜你没有在合并中使用索引)
答案 1 :(得分:0)
您的第一个示例是唯一的composite index。您的第二个示例包含三个非唯一索引。这是一个非常大的差异。
要查看在这些情况下实际使用的索引,请在查询中运行EXPLAIN。
请记住,表中的行数以及各个索引的基数/选择性也将决定是否使用索引。