在mysql中使用INDEXES的最大好处是什么?

| 我知道我需要设置一个主键,并将任何应该唯一的东西都设置为唯一键,但是什么是INDEX?如何使用它们呢? 有什么好处?优点缺点?我注意到我可以使用它们,或者什么时候不能使用?     
已邀请:
简短答案: 索引加快ѭ0的速度,而减慢.1的速度。 通常,拥有索引会更好,因为它们使ѭ2的速度比减慢ѭ3的速度快得多。 在ѭ4上,如果在
WHERE
子句中使用了索引字段,则索引可以加快处理速度,而在
update
索引字段之一中使用索引可以减慢处理速度。 您如何知道何时使用索引 在
SELECT
语句前添加
EXPLAIN
。 像这样:
EXPLAIN SELECT * FROM table1 
WHERE unindexfield1 > unindexedfield2 
ORDER BY unindexedfield3
将向您显示MySQL在每个未索引字段上必须做多少工作。 使用该信息,您可以决定是否值得添加索引。 说明还可以告诉您删除和索引是否更好
EXPLAIN SELECT * FROM table1 
WHERE indexedfield1 > indexedfield2 
ORDER BY indexedfield3
如果只选择了很少的行,或者MySQL决定忽略索引(它会不时这样做),那么您最好也删除索引,因为它会减慢ѭ3的速度,但不会加快ѭ2的速度。 再一次,也可能是您的select语句不够聪明。 (对于答案的复杂性,很抱歉,我试图将其保持简单,但失败了)。 链接: MySQL索引-最佳做法是什么?     
优点: 更快地查找结果。这全部与减少磁盘IO数量有关。您可以通过使用诸如B树或哈希索引之类的索引结构来更快地获取数据,从而减少磁盘IO(页获取)的数量,而不是扫描整个表以获取结果。 缺点: 写入速度较慢(可能)。您不仅必须将数据写入表中,而且还必须写入索引中。这可能会导致系统重组索引结构(哈希索引,B-Tree等),这可能在计算上非常昂贵。 自然会占用更多的磁盘空间。您正在存储更多数据。     
考虑索引的最简单方法是考虑字典。它具有单词,并且具有与那些单词相对应的定义。字典在\“ word \”上有一个索引,因为当您去字典时,您想快速查找一个词,然后获得其定义。字典通常只包含一个索引-一个单词的索引。 数据库是类似的。当数据库中有一堆数据时,您将具有某些将其取出的方法。假设您有一个User表,并且经常通过FirstName列查找用户。由于这是您在应用程序中经常执行的操作,因此应考虑在此列上使用索引。这将在数​​据库中创建一个结构,如果可以的话,可以按该列进行排序,因此按名字查找某些内容就像在字典中查找一个单词一样。如果没有此索引,则可能需要先查看所有行,然后再确定哪些行具有特定的名字。通过添加索引,您可以快速完成。 那么,为什么不对所有列都添加索引并使其快速呢?像一切一样,这是一个权衡。每次在表User中插入一行时,数据库将需要执行其魔术操作并对索引列上的所有内容进行排序。这可能很昂贵。     
您不必具有主键。索引(任何类型)都可用于加快查询速度,并且至少在InnoDB引擎中,可以使用外键约束。使用唯一索引还是普通索引(非唯一索引)取决于是否要在键中允许重复值。     
这是一个通用的数据库概念,您可以使用外部资源来阅读它,例如http://beginner-sql-tutorial.com/sql-index.htm或http://en.wikipedia.org/wiki/Index_(数据库)     
索引使MySQL可以更快地找到数据。您可以在
WHERE
子句中使用的列上使用它们。例如,如果您有一个名为
score
的列,并且想要查找带有
score > 5
的所有内容,则默认情况下,这意味着MySQL将需要遍历WHOLE表以查找那些分数。但是,如果使用BTREE索引,则找到满足该条件的索引会更快地发生很多。 索引有一个价格:磁盘和内存空间。如果这是一个很大的表,那么您的索引将变得相当大。     
这样想:在书中建立索引最大的好处是什么?几乎是同一回事。您有一本稍大的书,但是您可以快速查找内容。当您在列上创建索引时,就是说您希望能够在where子句中对其进行引用以快速查找它。     

要回复问题请先登录注册