在各种ORMS的文档中,它们总是提供一种创建索引等的方法。他们总是提到以确保为效率创建适当的索引,好像这是对需要使用一个非手写的sqqler的固有知识ORM。我对索引(PK之外)的理解基本上是:如果您打算这样做 LIKE 查询(即搜索)基于列的内容,您应该为该列使用全文索引。关于索引(主要与效率有关),我还应该知道什么?我觉得我家门口有一个知识的世界,但是在下面有一个巨大的折叠式鼠标垫,所以我无法完成(我不知道为什么我觉得我需要这么说,但是感谢您提供沙发)。

有帮助吗?

解决方案

想想一个索引,就像一本书背面的索引一样。这是与书籍的内容完全不同的区域,如果您要寻求某些特定价值,则可以转到索引并查找(订购索引,因此找到东西比扫描书的每一页要快得多。 )。

索引条目具有页码,因此您可以快速转到“寻求主题”的页面。数据库索引非常相似;它是数据库中相关信息(索引中包含的字段)中相关信息的有序列表,并提供数据库的信息以查找匹配的记录。

因此,当您需要经常搜索的信息时,您将创建索引。普通索引无助于您的“部分”寻求诸如查询之类的寻求,但是任何时候您需要获得一组结果,而字段X具有一定的值,它们都可以防止DBMS需要“扫描”整个表格,寻找匹配值。

当您需要在列上排序时,它们也会有所帮助。

要记住的另一件事;如果DBMS允许您创建具有多个字段的单个索引,请确保调查特定于DBM的索引。如果所有这些字段都在查询中使用,则包含多个字段的索引可能只有完全(或根本)有用。相反,单个表具有多个索引,每个索引具有一个字段,对于通过多个字段进行过滤/排序的查询可能不会有太多(或任何)帮助。


您提到了全文索引和PKS(主要键)。这些与常规索引不同,尽管它们通常具有相似的目的。

首先,请注意,主键通常是索引(在MSSQL中,实际上是“群集索引”),但这并不需要特别是这种情况。例如,MSSQL PK是默认情况下的聚类索引。群集索引很特别,因为它们不是在其他地方存储的单独的数据,但是数据本身是按群集索引在表中排列的。这就是为什么流行的PK是一个 int 随着顺序增长的值自动生成的值。因此,群集索引分类表中的数据专门由字段的值分组。将此与传统词典进行比较;条目本身是由“键”订购的,即被定义的单词。

但是在MSSQL(查看您的DBMS文档以获取信息),如果您愿意,您可以将群集索引更改为不同的字段。有时这是这样做的 datetime 基于字段。


全文索引完全是不同种类的野兽。他们使用一些相同的原则,但是他们所做的与我正在描述的普通索引并不完全相同。另外:在某些DBMS中, LIKE 查询确实如此 不是 使用全文索引;需要特殊查询操作员。

这些索引是不同的,因为它们的目的不是在列的整体值(一个数字,日期,一小部分char数据)上找到/排序,而是在文本字段中找到单个单词/短语(S)被索引。

他们还可以通常能够搜索类似的单词,不同的时态,常见的拼写错误等,并且通常忽略了噪音单词。他们工作的不同方式是为什么他们也可能需要不同的操作员使用它们的原因。 (再次,查看您的DBMS本地文档!)

其他提示

该答案是特定于Oracle的,但是答案中的要点适用于大多数关系数据库系统

如何选择和优化Oracle索引?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top