在mysql中使用INDEXES有什么好处?

Bas*_*sic 16 mysql indexing

我知道我需要一个主键集,并设置任何唯一的键作为唯一键,但什么是INDEX以及如何使用它们?

有什么好处?优点缺点?我注意到我可以使用它们,我应该在什么时候使用它们?

Joh*_*ica 19

简短的回答:
指数加速SELECT和减速INSERT.

通常情况下,拥有索引会更好,因为它们的速度select比速度慢得多insert.

在一个UPDATE索引可以加快速度一路攀升,如果索引字段中使用的WHERE条款和慢下来的东西,如果你update的索引的领域之一.

你怎么知道何时使用索引

EXPLAIN在你的SELECT陈述前添加.
像这样:

EXPLAIN SELECT * FROM table1 
WHERE unindexfield1 > unindexedfield2 
ORDER BY unindexedfield3
Run Code Online (Sandbox Code Playgroud)

将向您展示MySQL在每个未编制索引的字段上必须完成的工作量.
使用该信息,您可以决定是否值得添加索引.

解释也可以告诉你是否更好地删除和索引

EXPLAIN SELECT * FROM table1 
WHERE indexedfield1 > indexedfield2 
ORDER BY indexedfield3
Run Code Online (Sandbox Code Playgroud)

如果选择了非常少的行,或者MySQL决定忽略索引(它会不时地执行此操作),那么您也可以删除索引,因为它减慢您insert的速度,但不会加速您select的速度.

然后,也可能是你的select语句不够聪明.
(对不起,答案的复杂性,我试图保持简单,但失败了).

链接:
MySQL索引 - 最佳实践是什么?


Mik*_*wis 9

优点:

更快地查找结果.这就是减少磁盘IO的数量.您可以通过使用B-TreesHash Indexes之类的索引结构来更快地获取数据,而不是扫描整个表以获取结果,而不是减少磁盘IO的数量(页面提取).

缺点:

  • 写得较慢(可能).您不仅需要将数据写入表中,还必须写入索引.这可能导致系统重构索引结构(哈希索引,B树等),这可能在计算上非常昂贵.

  • 当然占用更多的磁盘空间.您正在存储更多数据.


ska*_*kaz 5

考虑索引的最简单方法就是考虑字典。它有单词,并且有与这些单词相对应的定义。字典有一个关于“单词”的索引,因为当你查字典时,你想快速查找一个单词,然后得到它的定义。一本字典通常只包含一个索引——按单词的索引。

数据库是类似的。当数据库中有大量数据时,您将有某些想要将其取出的方法。假设您有一个 User 表,并且经常通过 FirstName 列查找用户。由于这是您在应用程序中经常执行的操作,因此您应该考虑在此列上使用索引。这将在数​​据库中创建一个结构,如果您愿意的话,可以按该列进行排序,以便按名字查找某些内容就像在字典中查找单词一样。如果您没有此索引,则可能需要先查看所有行,然后才能确定哪些行具有特定的 FirstName。通过添加索引,您可以加快速度。

那么为什么不在所有列上建立索引并使它们都变得更快呢?就像所有事情一样,需要权衡。每次您向表 User 中插入一行时,数据库都需要发挥其魔力并对索引列上的所有内容进行排序。这可能很昂贵。


Ted*_*opp 1

您不必拥有主键。索引(任何类型)用于加速查询,并且至少对于 InnoDB 引擎来说,可以强制执行外键约束。使用唯一索引还是普通(非唯一)索引取决于您是否希望在键中允许重复值。