如何在mysql中明智地应用索引
Posted
技术标签:
【中文标题】如何在mysql中明智地应用索引【英文标题】:How to judiciously apply indexes in mysql 【发布时间】:2012-09-01 06:05:44 【问题描述】:索引主要用于提高数据库查询的速度,最适合应用在表的主键上,但不一定总是如此。
我想知道应用索引并因此获得最佳结果的决策。
因为我对索引的了解并非仅限于将其应用于主键,否则我会在什么情况下应用它
【问题讨论】:
我应该删除这些问题吗,这个问题要关闭了? 是的,这是一个非常有趣的话题,但不幸的是它不适合 SO 的 QA 格式。 我应该让它更具体吗? @dystroy 这可能是一个解决方案。但请注意,很难以简洁的方式公开非平凡的表索引的完整要求。 【参考方案1】:尽管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';
因为它们经常一起使用,所以您应该使用 both 字段创建索引(请参阅multiple-column indexes
)。另一方面,当您通过zip
进行搜索时,您通常会在没有附加城市/州的情况下进行搜索,例如:
WHERE zip = 12345;
这样,您将仅使用 zip 字段创建索引。
另外,值得注意的是,索引不仅占用空间,还需要在任何INSERT
或UPDATE
与它们一起在表上进行修改。如果您有大量索引和 很多 条记录,则可以开始注意到单个 INSERT
的时间。因此,请确保您确实需要索引将提供的额外性能提升,然后再添加它们,例如 salt+pepper。
【讨论】:
preciseeeeeely 我在找什么,一个非常简洁的例子,谢谢@newfurniturey以上是关于如何在mysql中明智地应用索引的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中明智地组合两个 numpy 数组元素?