如何在mysql中明智地应用索引

时间:2012-09-01 06:05:44

标签: mysql indexing

索引主要用于提高数据库查询的速度,最好应用于表的主键,但是这可能并非总是如此。

我想知道应用索引的决策,从而实现最佳结果。

因为我对索引的了解仅限于将其应用于主键,在什么情况下我会应用它否则

1 个答案:

答案 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字段创建一个索引。

此外,值得注意的是,索引不仅占用空间,而且需要在具有它们的表上的任何INSERTUPDATE期间进行修改。如果您有大量索引和批次记录,则可以开始注意到单个INSERT的时间。因此,请确保您在添加它们之前确实需要额外的性能提升,例如盐+胡椒。