索引主要用于提高数据库查询的速度,最适合应用在表的主键上,但不一定总是如此。
我想知道应用索引并因此获得最佳结果的决策。
因为我对索引的了解不仅限于将其应用于主键,否则我会在什么情况下应用它
尽管它们被广泛使用,但最好在语句的子句和子句index
中经常使用的任何列上使用它们。WHERE
ORDER BY
以下表为例:
CREATE TABLE `people` (
`id` int,
`name` varchar(255),
`phone` varchar(10),
`state` varchar(50),
`city` varchar(100),
`zip` int
);
默认情况下,您可能只会在id
列上有一个索引。现在,假设您的数据库中有 20k“人”。当通过 id 字段以外的任何字段进行搜索时,您可能会开始注意到一些滞后。这就是索引的用武之地。
您很有可能不会按字段进行搜索phone
(可能,但不太可能),因此我们不会索引该字段。但是,按state
/ city
/搜索的zip
可能性更大。当您按城市/州进行搜索时,您通常会同时使用WHERE
类似以下的子句进行搜索:
WHERE state = 'Florida' AND city = 'Miami';
因为它们经常一起使用,所以您应该使用这两个字段创建一个索引(请参阅 参考资料multiple-column indexes
)。另一方面,当您通过 搜索时zip
,您通常会在没有附加城市/州的情况下进行搜索,例如:
WHERE zip = 12345;
这样,您将仅使用 zip 字段创建索引。
另外,值得注意的是,索引不仅占用空间,还需要在任何过程中INSERT
或UPDATE
在与它们的表上进行修改。如果您有大量索引和大量INSERT
记录,则可以开始注意到单个的时间。因此,请确保您确实需要索引将提供的额外性能提升,然后再添加它们(如盐 + 胡椒)。