索引主要用于提高数据库查询的速度,最好应用于表的主键,但是这可能并非总是如此。
我想知道应用索引的决策,从而实现最佳结果。
因为我对索引的了解仅限于将其应用于主键,在什么情况下我会应用它否则
答案 0 :(得分:2)
尽管使用它们很广泛,但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
的{{1}}子句一起搜索它们。
WHERE state = 'Florida' AND city = 'Miami';
因为它们经常一起使用,所以您应该使用两个字段创建索引(请参阅multiple-column indexes
)。另一方面,当您按zip
进行搜索时,通常会在没有附加城市/州的情况下进行搜索,例如:
WHERE zip = 12345;
有了这个,您将使用zip字段创建一个索引。
此外,值得注意的是,索引不仅占用空间,而且需要在具有它们的表上的任何INSERT
或UPDATE
期间进行修改。如果您有大量索引和批次记录,则可以开始注意到单个INSERT
的时间。因此,请确保您在添加它们之前确实需要额外的性能提升,例如盐+胡椒。