什么是指数?

时间:2010-04-08 12:25:53

标签: mysql database database-design

MySQL中的索引是什么????

7 个答案:

答案 0 :(得分:18)

索引可加快SELECT查询,因为索引按定义排序。此外,UNIQUE索引强制执行约束,即该列的值(或绑定列的值组合)仅存在一次(同样适用于PRIMARY,但PRIMARY每个表只能存在一次,与UNIQUE键相比)。

索引是一种权衡:它们极大地加速了SELECT查询(当使用的列具有INDEX时),但是当通过INSERT / UPDATE / DELETE更改表时,它们会使MySQL表占用更多空间并花费更多时间。

答案 1 :(得分:16)

索引就像一本书的索引。想象一下,你有一本食谱书,你想知道如何制作一个煎蛋卷,你只需跳到后面,找到单词及其页码,然后跳到该页码。现在想象你没有索引,不得不搜索400页的食谱,真是个噩梦!

索引有几种类型主键,索引,唯一,全文

主键被认为是你的主索引,是mysql找到记录的第一个地方。大多数人为此使用自动递增整数字段,因为它通常在每一行都是唯一的。

索引被视为您的辅助主键,您可以将这些键放在您希望能够快速搜索的字段上。

唯一键与索引类似,但它们通过确保您不能在该列中放置重复项来工作,例如,您不能在两个不同的行中的同一列中显示“eggs”一词。

最后,Fulltext是mysql的MyISAM存储引擎使用的特殊索引,它用于使用人类短语搜索记录。没有太多细节,它的mysqls拥有自己的搜索引擎,这是LIKE sql命令的更高级版本。

例如,如果我搜索“鸡蛋和黄油”,全文将搜索包含鸡蛋,黄油或两者的记录。 LIKE只会搜索包含“鸡蛋和黄油”的字符串

我希望这会有所帮助,mysql site有很多关于这个问题的信息,但这给了你一般的要点。

快乐编码:)

答案 2 :(得分:5)

索引用于两件事:

  1. 指定唯一标识行(主键)的字段(或多个字段)。
  2. 在查找常用字段时节省时间。例如,如果您经常按用户名查找用户,则应在用户名列上添加索引。
  3. 在这里阅读有关索引的更多信息http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html或者更好地购买有关数据库设计的书籍。

    关于第二个问题,请查看此http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html

    主要区别在于TEXT存储在表空间之外并从表中引用,而VARCHAR存储为普通字段。在这种情况下的性能完全取决于您的使用模式。 TEXT还可以允许全文搜索。

    此外,由于上述原因,您无法在TEXT上使用索引,因此将其用作查找字段不是一个好主意。

答案 3 :(得分:1)

每个数据库表都需要一个主键,我认为这也是主要的索引。索引用于加速查询,如果您在WHERE中使用它,则应该有一个列的索引 - 出于性能原因,SQL查询的一部分。

在您不需要的情况下使用TEXT是不好的。最好限制用户使用某些字段,例如 title url ,因为您在url上有索引。我认为您不能在TEXT类型的列上使用索引。我不认为 url 上的FULLTEXT - 索引是你想要的。

我建议您在介绍性文字或网站上阅读有关数据库的内容。

答案 4 :(得分:0)

索引可加快选择查询速度。它们使数据库之间的区别在于必须检查表中的每一行以获得结果,并确切地知道在何处查找信息。它与循环遍历字典类型数据结构以找到您要查找的内容的概念相同,而不是仅仅通过它的键(索引)找到您想要的值。索引会减慢插入,更新和删除,但如果你有太多因为表的每次更改现在都必须创建索引。

非常高容量/高性能应用程序中的流行策略是拥有两个数据库。一个针对快速检索进行了最佳索引,另一个针对快速插入的索引非常少。唯一的问题是,当检索数据库尚未与插入数据库同步时,您将丢失实时数据。

还有两种不同的索引。群集和非群集索引。如果我没弄错的话,在MySQL中,主键是群集的,而所有其他索引都是非群集的。关于差异的一篇很好的介绍文章是here。它涵盖了SQL Server,但概念应该是相同的。

我没有使用MySQL,但从我在网上看到的内容来看,FULLTEXT提供了一种使用自然语言全文搜索进行搜索的方法。基本上,在查询中,您将提供搜索全文索引列的术语,它将撤回所有结果。以下是我发现的一些您可能会觉得有用的主题的文章 MySQL Docs on Full Text Search
Article 1
Article 2

答案 5 :(得分:0)

索引是用于优化查询的数据结构。它们在概念上非常类似于书后面的索引。如果您决定添加一个新的章节,那么它们需要花费一些空间和时间来维护,就像书索引必须重做一样。但是它们通常会极大地加快查询速度(比没有查询速度快数千倍甚至数百万倍)。

答案 6 :(得分:0)

如果您知道每个人都有唯一的社会安全号码(SSN),那么您可以创建一个由SSN订购的每个人姓名的索引。然后,如果你得到某人的SSN,那么找到他们的名字真的很快。

现在假设每个人都有一个马尼拉文件夹。该卡可能有详细的医疗记录等。您的数据库可能无法保持这些卡的顺序 - 也许它只是将新文件夹添加到compactus的末尾。但它保留了一个排序的“索引”,这样如果你查找一个SSN,它就可以准确地告诉你相关文件夹的保存位置。

在此示例中,SSN用作主键。它很好,如果它是独一无二的,但即使它不是唯一的,它仍然可以加快速度。