SQL中的索引是什么?

还有,什么时候使用手机比较合适?

728459 次浏览

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

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

指数的使用有几个不同的原因。主要原因是为了加快查询速度,以便更快地获取行或对行进行排序。另一个原因是定义一个主键或唯一索引,这将保证没有其他列具有相同的值。

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

索引可用于高效地查找查询中与某列匹配的所有行,然后仅遍历表的该子集以查找精确匹配。如果在WHERE子句中的任何列上都没有索引,SQL服务器必须遍历整张桌子并检查每一行是否匹配,这在大表上可能是一个缓慢的操作。

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

在MySQL中,你可以在你的SELECT语句前使用EXPLAIN来查看你的查询是否会使用任何索引。这是排除性能问题的良好开端。点击此处阅读更多信息: http://dev.mysql.com/doc/refman/5.0/en/explain.html < / p >

如果你正在使用SQL Server,最好的资源之一是安装时附带的Books Online !这是第一个地方,我将参考任何SQL Server相关的主题。

如果是实际的“我应该怎么做?”之类的问题,那么StackOverflow将是一个更好的提问场所。

此外,我已经有一段时间没有回来了,但sqlservercentral.com曾经是顶级的SQL Server相关网站之一。

一般来说,index是B-tree。有两种类型的索引:聚集索引和非聚集索引。

集群索引创建了行的物理顺序(它可以只有一个,在大多数情况下它也是一个主键-如果你在表上创建了主键,你也在该表上创建了聚集索引)。

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

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

聚集索引类似于电话簿的内容。你可以在“希尔迪奇,大卫”上打开这本书,找到所有希尔迪奇酒店的所有信息。这里聚集索引的键是(lastname, firstname)。

这使得聚集索引非常适合基于范围查询检索大量数据,因为所有数据都位于彼此相邻的位置。

由于聚集索引实际上与数据的存储方式有关,所以每个表只能使用一个索引(尽管可以模拟多个聚集索引)。

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

想象一下,如果你必须在电话簿中搜索所有住在“伦敦”的人——只有聚类索引,你必须搜索电话簿中的每一个项目,因为聚类索引上的键是on(姓,名),因此生活在伦敦的人随机分散在索引中。

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

希望有帮助!

索引就是为了快速找到数据

数据库中的索引类似于书籍中的索引。如果一本书有索引,我让你在书中找到一个章节,你可以在索引的帮助下很快找到。另一方面,如果这本书没有索引,你将不得不花更多的时间从开始到结束寻找每一页的章节。

以类似的方式,数据库中的索引可以帮助查询快速找到数据。如果你不熟悉索引,下面的视频会非常有用。事实上,我从他们身上学到了很多。

< p > 指数基本知识
聚集索引和非聚集索引
唯一索引和非唯一索引
指标的优缺点 < / p >

INDEXES -查找数据容易

UNIQUE INDEX -不允许重复值

INDEX的语法

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

UNIQUE INDEX的语法

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

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

基于索引的搜索尤其适用于查询包含WHERE过滤器的情况。否则,即没有WHERE-filter的查询将选择整个数据和过程。在没有索引的情况下搜索整个表称为表扫描。

你将以清晰可靠的方式找到Sql-Indexes的确切信息: 遵循这些链接:

  1. 对于密码的明智理解: 李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 < / >

首先,我们需要了解正常(没有索引)查询是如何运行的。它基本上是逐个遍历每一行,当它找到数据时就返回。参考下图。(此图像取自视频。)

Without indexing 假设查询要找到50条记录,那么作为线性搜索,它必须读取49条记录。< / p >

参考下图。(此图像取自视频)

enter image description here

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

索引是on-disk structure associated with a table or view that speeds retrieval of rows from the table or view。索引包含从表或视图中的一个或多个列构建的键。这些键存储在一个结构(b -树)中,使SQL Server能够快速有效地查找与键值关联的行。

Indexes are automatically created when PRIMARY KEY and UNIQUE constraints are defined on table columns. For example, when you create a table with a UNIQUE constraint, Database Engine automatically creates a nonclustered index.

如果配置了PRIMARY KEY,数据库引擎将自动创建聚集索引,除非已经存在聚集索引。当您试图在现有表上强制PRIMARY KEY约束,而该表上已经存在聚集索引时,SQL Server将使用非聚集索引强制主键。

有关索引(聚集和非聚集)的更多信息请参考此: https://learn.microsoft.com/en-us/sql/relational-databases/indexes/clustered-and-nonclustered-indexes-described?view=sql-server-ver15 < / p >

希望这能有所帮助!

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

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

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.

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

所以指数是这样的

enter image description here

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

查询执行的可视化表示

enter image description here

所以,索引只是把时间复杂度从o(n)降低到o(log n)

__abc0 - __abc1

INDEX不是SQL的一部分。INDEX在物理层面上创建一个平衡树来加速CRUD。

SQL是一种描述概念级模式和外部级模式的语言。SQL不描述物理层模式。

创建INDEX的语句是由DBMS定义的,而不是SQL标准。