What is an index in SQL?

Sur*_*har 406 sql indexing

What is an index in SQL? Can you explain or reference to understand clearly?

Where should I use an index?

Emi*_*röm 348

索引用于加速数据库中的搜索.MySQL有关于这个主题的一些很好的文档(这也与其他SQL服务器相关): http //dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

索引可用于有效地查找与查询中某些列匹配的所有行,然后仅遍历表的该子集以查找完全匹配.如果WHERE子句中的任何列上没有索引,则SQL服务器必须遍历整个表并检查每一行以查看它是否匹配,这可能是对大表的缓慢操作.

索引也可以是UNIQUE索引,这意味着您不能在该列中具有重复值,或者PRIMARY KEY某些存储引擎中的值在数据库文件中定义值的存储位置.

在MySQL中,您可以EXPLAINSELECT语句前使用,以查看您的查询是否将使用任何索引.这是解决性能问题的良好开端.在此处阅读更多内容:http: //dev.mysql.com/doc/refman/5.0/en/explain.html

  • @DanielKurniadi 大多数索引都不是唯一的。我可能有一个用户数据库,想要查询居住在哥德堡的每个人。“城市”字段上的索引将加快我的查询速度。但有超过 1 个用户居住在哥德堡,因此索引必须是非唯一的。 (4认同)

Dav*_*tch 168

聚集索引就像电话簿的内容.你可以在'Hilditch,David'打开这本书,找到所有'Hilditch'彼此相邻的所有信息.这里聚集索引的键是(lastname,firstname).

这使得聚簇索引非常适合基于基于范围的查询检索大量数据,因为所有数据都位于彼此旁边.

由于聚簇索引实际上与数据的存储方式有关,因此每个表中只有一个可能存在(尽管您可以欺骗模拟多个聚簇索引).

非聚集索引的不同之处在于您可以拥有许多索引,然后它们指向聚簇索引中的数据.你可以在电话簿的背面有一个非聚集索引(城镇,地址)

想象一下,如果你必须通过电话簿搜索住在"伦敦"的所有人 - 只有聚集索引,你必须搜索电话簿中的每一个项目,因为聚簇索引上的键是打开的(姓氏,因此,居住在伦敦的人们在整个指数中随机分散.

如果(town)上有非聚集索引,则可以更快地执行这些查询.

希望有所帮助!


小智 140

一个非常好的比喻是将数据库索引视为书中的索引.如果您有一本关于国家的书籍并且您正在寻找印度,那么为什么要翻阅整本书 - 这相当于数据库术语中的全表扫描 - 当您可以转到后面的索引时本书,它将告诉您有关印度信息的确切页面.同样,由于book索引包含页码,因此数据库索引包含指向包含要在SQL中搜索的值的行的指针.

更多信息


Mit*_*eat 82

索引用于加速查询的性能.它通过减少必须访问/扫描的数据库数据页的数量来实现.

在SQL Server中,a 聚簇索引确定表中数据的物理顺序.每个表只能有一个聚簇索引(聚簇索引是表).表上的所有其他索引都称为非群集.


小智 48

索引都是关于快速查找数据的.

数据库中的索引类似于您在书中找到的索引.如果一本书有索引,并且我要求你在那本书中找到一章,你可以在索引的帮助下快速找到它.另一方面,如果书中没有索引,则必须花费更多时间通过查看书籍从开头到结尾的每个页面来查找章节.

以类似的方式,数据库中的索引可以帮助查询快速查找数据.如果您不熟悉索引,则以下视频非常有用.事实上,我从中学到了很多东西.

索引基础
群集和非群集索引
唯一 索引和非唯一索引索引的
优缺点


Voi*_*ice 23

总的来说索引是一个B-tree.索引有两种类型:聚簇索引和非聚簇索引.

聚簇索引创建行的物理顺序(它可以只有一个,在大多数情况下它也是主键 - 如果在表上创建主键,则也会在此表上创建聚簇索引).

非聚簇索引也是二叉树,但它不会创建行的物理顺序.因此非聚簇索引的叶节点包含PK(如果存在)或行索引.

索引用于提高搜索速度.因为复杂性是O(log N).索引是一个非常大而有趣的话题.我可以说在大型数据库上创建索引有时候是某种艺术.

  • 一般来说,它是一个b树而不是二叉树. (5认同)

小智 20

INDEXES - 轻松查找数据

UNIQUE INDEX - 不允许重复值

语法 INDEX

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
Run Code Online (Sandbox Code Playgroud)

语法 UNIQUE INDEX

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
Run Code Online (Sandbox Code Playgroud)


nay*_*ies 12

INDEX是一种性能优化技术,可加速数据检索过程.它是一个与表(或视图)关联的持久数据结构,以便在从该表(或视图)检索数据期间提高性能.

当您的查询包含WHERE过滤器时,更具体地应用基于索引的搜索.否则,即没有WHERE过滤器的查询选择整个数据和过程.在没有INDEX的情况下搜索整个表称为表扫描.

您将以清晰可靠的方式找到Sql-Indexes的确切信息:请点击以下链接:

  1. 对于cocnept-wise的理解:http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. 为了实现明智的理解:http: //dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html


小智 12

首先,我们需要了解查询运行的正常(没有索引).它基本上逐个遍历每一行,当它找到它返回的数据时.请参阅下图.(此图片来自此视频.)

没有索引 因此假设查询是查找50,它将必须读取49条记录作为线性搜索.

请参阅下图.(此图片来自此视频)

在此输入图像描述

当我们应用索引时,查询将快速找到数据而不读取每个数据,只需通过消除每次遍历中的一半数据,如二进制搜索.mysql索引存储为B树,其中所有数据都在叶节点中.


Sen*_*ful 6

一个指标是用于几个不同的原因.主要原因是加快查询速度,以便您可以更快地获取行或排序行.另一个原因是定义主键或唯一索引,以确保没有其他列具有相同的值.


小智 6

如果您使用的是SQL Server,那么最好的资源之一就是安装附带的自己的联机丛书!这是我参考任何SQL Server相关主题的第一个地方.

如果它是实用的"我应该怎么做?" 那些问题,然后StackOverflow将是一个更好的问题.

此外,我还没有回来一段时间,但sqlservercentral.com曾经是那里的SQL Server相关网站之一.


Pan*_*war 5

那么,索引实际上是如何工作的呢?

首先,当我们在列上放置索引以优化查询性能时,数据库表不会自行重新排序。

An index is a data structure, (most commonly its B-tree {Its balanced tree, not binary tree}) that stores the value for a specific column in a table.
Run Code Online (Sandbox Code Playgroud)

B树的主要优点是其中的数据是可排序的。除此之外,B-Tree 数据结构具有时间效率,搜索、插入、删除等操作可以在对数时间内完成。

所以索引看起来像这样 -

在此输入图像描述

这里,对于每一列,它将与指向该行的确切位置的数据库内部标识符(指针)进行映射。现在,如果我们运行相同的查询。

查询执行的可视化表示

在此输入图像描述

因此,索引只是将时间复杂度从 o(n) 降低到 o(log n)。

详细信息- https://pankajtanwar.in/blog/what-is-the-sorting-algorithm-behind-order-by-query-in-mysql