MySQL中的索引是什么?
索引能够加速SELECT查询,因为它们本身就是有序的。此外,唯一索引可以强制确保该列(或绑定列的组合)的值仅存在一次(PRIMARY也是如此,但每个表只能有一个PRIMARY键,与唯一键不同)。
索引是一种权衡:它们可以极大地加速SELECT查询(当使用的列具有索引时),但在通过INSERT/UPDATE/DELETE更改表格时会使MySQL表格占用更多空间并花费更多时间。
索引就像书的目录一样。想象一下,你有一本食谱书,想知道如何制作煎蛋卷,那么你只需要跳到后面,找到单词并查找页码,然后跳到该页码即可。现在想象一下,如果没有目录,你必须搜索400页的菜谱,那将是一场噩梦!
索引有几种类型:主键、索引、唯一键和全文索引。
主键被认为是您的主要索引,MySQL 查找记录的第一个位置。大多数人使用自增整数字段来实现这一点,因为每一行通常是唯一的。
索引被认为是次要主键,您可以将其放置在希望快速搜索的字段上。
唯一键与索引类似,但它通过确保您不能在该列中放置重复值来工作,例如,在两个不同的行中,不能出现相同的单词“鸡蛋”。
最后,全文索引是 MySQL 的 MyISAM 存储引擎专用的特殊索引,用于使用人类语言短语搜索记录。简单说,它是 MySQL 自己的搜索引擎,是 LIKE SQL 命令的更高级版本。
例如,如果我搜索“鸡蛋和黄油”,全文索引将搜索包含鸡蛋、黄油或两者的记录,而 LIKE 只会搜索包含“鸡蛋和黄油”这个字符串的记录。
希望这有所帮助,《MySQL 网站》上有大量关于此主题的信息,但这给您提供了一般概述。
快乐编码 :)
每个数据库表都需要一个主键,我认为这也是主索引。索引用于加速查询,如果您在 SQL 查询的 WHERE
部分中使用了某一列,则应该对该列建立索引以提高性能。
在不需要使用 TEXT
的情况下使用它是不好的。最好限制用户在某些字段(如标题和 URL)上进行输入,因为您已经在 URL 上建立了索引。而且我认为您不能在类型为 TEXT
的列上使用索引。我认为您不需要在 url 上使用 FULLTEXT
索引。
我建议您阅读一些关于数据库的入门文本或网站。
索引可以加快查询速度。它们使得数据库不必检查表中的每一行以获取结果,而是知道了到哪里去找到信息。这有点类似于循环遍历字典类型的数据结构来查找所需内容,而不仅仅是通过键(索引)找到所需值。但是,如果您使用了太多的索引,插入、更新和删除操作将会变慢,因为现在每次对表进行更改都必须创建索引。
在极高容量/高性能应用程序中一个流行的策略是拥有两个数据库。一个是为快速检索而优化索引的数据库,另一个则只有很少的索引用于快速插入。唯一的问题是,当检索数据库还未与插入数据库同步时,您将会失去实时数据。
索引还有两种不同的类型:聚集索引和非聚集索引。如果我没记错的话,在MySQL中,主键是聚集索引,而所有其他索引都是非聚集索引。关于这两者的差异介绍,here有一篇不错的文章。虽然它涵盖的是SQL Server,但概念应该是相同的。
我没有太多使用MySQL的经验,但从我在网上看到的来看,FULLTEXT提供了一种使用自然语言全文搜索进行搜索的方法。 基本上,在查询中,您将提供要在其中搜索完整文本索引列的术语,并将返回所有结果。以下是我发现的几篇有关该主题的文章,您可能会发现有用。
MySQL全文搜索文档
文章1
文章2
索引是用于优化查询的数据结构。它们在概念上与书后的索引非常相似。它们需要一些空间和时间来维护,就像如果您决定添加新章节,则必须重新制作书籍索引一样。但是它们通常可以极大地加速查询(比没有索引时快数千甚至数百万倍)。