我知道我需要一个主键集,并设置任何唯一的键作为唯一键,但是什么是INDEX,我该如何使用它们?在mysql中使用INDEXES最大的好处是什么?
有什么好处?优点&缺点?我注意到我可以使用它们,我应该什么时候使用它?
我知道我需要一个主键集,并设置任何唯一的键作为唯一键,但是什么是INDEX,我该如何使用它们?在mysql中使用INDEXES最大的好处是什么?
有什么好处?优点&缺点?我注意到我可以使用它们,我应该什么时候使用它?
你不要有有一个主键。索引(任何类型的)用于加快查询速度,至少在InnoDB引擎中实施外键约束。无论您使用唯一索引还是普通索引(非唯一索引),都取决于您是否希望在键中使用重复值。
这是一个总的数据库概念,你可以使用外部资源来了解它,就像http://beginner-sql-tutorial.com/sql-index.htm或http://en.wikipedia.org/wiki/Index_(database)
索引可以让MySQL来查找数据更快。您可以在WHERE
条款中使用的列上使用它们。例如,如果您有一个名为score
的列,并且想要查找与score > 5
之间的所有内容,默认情况下,这意味着MySQL需要扫描整个表以查找这些分数。但是,如果您使用BTREE索引,那么找到那些符合该条件的索引会更快地发生。
指数有一个价格:磁盘和内存空间。如果这是一张非常大的桌子,你的指数会变得相当大。
优点:
更快地查找结果。这是关于减少磁盘IO的数量的。您可以使用索引结构(如B-Trees或Hash Indexes)更快地获取数据,而不是扫描整个表以获取结果,从而减少磁盘IO的数量(页面提取)。
缺点:
写入速度较慢(可能)。您不仅需要将数据写入表格,还必须写入索引。这可能会导致系统重新构造索引结构(哈希索引,B树等),这在计算上可能非常昂贵。
自然会占用更多的磁盘空间。您正在存储更多数据。
想想这样:在书中有索引的最大好处是什么?这是一回事。你有一本稍大的书,但你可以快速查找的东西。在列上创建索引时,您希望能够在where子句中引用它以快速查找它。
思考索引的最简单方法是思考字典。它有单词,它有与这些单词相对应的定义。字典有一个关于“单词”的索引,因为当你阅读一本字典时,你想快速查找一个单词,然后得到它的定义。一本字典通常只包含一个索引 - 一个索引。
数据库是类似的。当你在数据库中有一堆数据时,你会有一些你想要得到的方法。假设您有一个用户表,并且您经常通过FirstName列查找用户。由于这是您经常在应用程序中执行的操作,因此您应该考虑在此列上使用索引。这将在数据库中创建一个结构体,如果您愿意的话,在该列中进行排序,以便通过名字查找某些内容就像在字典中查找单词一样。如果你没有这个索引,你可能需要查看所有的行,然后再确定哪些具有特定的FirstName。通过添加一个索引,你已经做得很快。
那么为什么不把所有列的索引,并使他们都快?像所有事情一样,这是一种折衷。每次向表格中插入一行用户时,数据库都需要执行它的魔法并对索引列上的所有内容进行排序。这可能是昂贵的。
简短回答:
索引加快SELECT
's并减缓INSERT
's。
通常最好有索引,因为它们加速select
多于它们减慢insert
。如果你的索引字段的update
一个
上UPDATE
如果索引字段是WHERE
条款和慢下来的东西中使用的索引可以加快速度方式。
你怎么知道什么时候使用索引
添加EXPLAIN
在SELECT
语句的前面。
像这样:
EXPLAIN SELECT * FROM table1
WHERE unindexfield1 > unindexedfield2
ORDER BY unindexedfield3
会告诉你多少工作,MySQL将不得不在每个索引字段做。
使用该信息可以决定是否值得添加索引。
解释也可以告诉你,如果它是更好地下降,指数
EXPLAIN SELECT * FROM table1
WHERE indexedfield1 > indexedfield2
ORDER BY indexedfield3
如果很少选择行或MySQL决定忽略指数(它是不时)那么你也可以放弃索引,因为它是放慢你的insert
s,但不加快你的select
的。
然后它也可能是你的选择语句不够聪明。
(对不起,复杂的答案,我试图保持简单,但失败了)。
我应该如何使用这个查询?:EXPLAIN SELECT * FROM table1 WHERE indexedfield1> indexedfield2 ORDER BY indexedfield3;我的意思是我知道要在indexedfield1上放什么,但那些indexedfield2和indexedfield3怎么样? – Viscocent 2014-04-30 07:21:36
参考文献:[Wikipedia文章](http://en.wikipedia.org/wiki/Index_(数据库)) – 2011-04-17 22:33:59
降价吃了你的括号 – 2011-04-17 22:35:21