在各种ORM的文档中,他们总是提供一种创建索引的方法,等等。他们总是提到要确保创建适当的索引以提高效率,就好像这是需要使用ORM的非手工编写的SQLer的固有知识。我对索引(PK之外)的理解基本上是:如果您计划根据列的内容进行LIKE
查询(即搜索),则应该对该列使用全文索引。关于索引(主要是关于效率),我还应该知道什么?我感觉在我的门口有一个知识的世界,但是有一个巨大的折叠鼠标垫卡在它下面,所以我无法通过(我不知道为什么我觉得我需要这么说,但谢谢你提供了沙发)。
发布于 2010-11-04 04:15:45
粗略地想一想索引,就像书后面的索引。这是一个与书籍内容完全不同的区域,如果你正在寻找一些特定的值,你可以转到索引并查找它(索引是有序的,所以在那里找到东西比扫描每一页书要快得多)。
索引条目有一个页码,因此您可以快速转到查找您的主题的页面。数据库索引非常类似;它是数据库中相关信息(索引中包含的字段)的有序列表,其中包含数据库查找匹配记录的信息。
所以..。当您有需要频繁搜索的信息时,可以创建索引。普通的索引对像like查询这样的“部分”查找没有帮助,但是当您需要获取一组字段X具有确定值的结果时,它们使DBMS不需要“扫描”整个表来查找匹配值。
当您需要对列进行排序时,它们也会有所帮助。
另一件需要牢记的事情是:如果DBMS允许您创建具有多个字段的单个索引,请务必针对您的DBMS调查这样做的影响。包含多个字段的索引可能只有在查询中使用所有这些字段时才是完全(或根本)有用的。相反,单个表有多个索引,每个索引有一个字段,对于按多个字段过滤/排序的查询可能没有太多(或任何)帮助。
您提到了全文索引和PKs (主键)。这些索引与常规索引不同,尽管它们通常具有相似的用途。
首先,请注意,主键通常是一个索引(在MSSQL中,实际上是一个“聚集索引”),但这不一定是特定的情况。例如,默认情况下,MSSQL PK是一个聚集索引;聚集索引的特殊之处在于,它们不是存储在其他地方的单独一位数据,而是数据本身在表中按聚集索引的顺序排列。这就是为什么流行的PK是一个int
值,它是通过连续递增的值自动生成的。因此,聚集索引专门按照字段的值对表中的数据进行排序。将其与传统字典进行比较;词条本身是按“key”排序的,“key”是定义的单词。
但在MSSQL中(请查看DBMS文档中的信息),如果愿意,您可以将聚集索引更改为不同的字段。有时,这是在基于datetime
的字段上完成的。
全文索引是完全不同种类的野兽。它们使用了一些相同的原则,但它们所做的与我所描述的普通索引并不完全相同。另外:在一些数据库管理系统中,LIKE
查询不使用全文索引;需要特殊的查询操作符。
这些索引是不同的,因为它们的目的不是对列的整个值(一个数字、一个日期、一小段字符数据)进行查找/排序,而是在被索引的文本字段中查找单个单词/短语。
它们还经常能够搜索相似的单词、不同的时态、常见的错误拼写等,并且通常忽略干扰单词。它们的工作方式不同,这就是为什么它们也可能需要不同的运算符来使用它们。(同样,请检查DBMS的本地文档!)
发布于 2010-11-04 04:12:52
此答案特定于Oracle,但答案中的要点适用于大多数关系数据库系统
https://stackoverflow.com/questions/4093788
复制相似问题