什么是SQL中的索引?您可以解释或参考以清楚地理解吗?
我应该在哪里使用索引?
什么是SQL中的索引?您可以解释或参考以清楚地理解吗?
我应该在哪里使用索引?
Answers:
索引用于加速数据库中的搜索。MySQL在该主题上有一些不错的文档(也与其他SQL Server相关):http : //dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
索引可用于有效地查找与查询中某个列匹配的所有行,然后仅遍历表的该子集以查找完全匹配。如果WHERE
子句中任何列上都没有索引,则SQL
服务器必须遍历整个表并检查每一行是否匹配,这在大表上可能是一个缓慢的操作。
索引也可以是UNIQUE
索引,这意味着在该列中不能有重复的值,或者PRIMARY KEY
在某些存储引擎中定义值在数据库文件中的存储位置。
在MySQL中,您可以EXPLAIN
在SELECT
语句前面使用来查看查询是否将使用任何索引。这是解决性能问题的良好起点。在此处阅读更多信息:http :
//dev.mysql.com/doc/refman/5.0/en/explain.html
聚集索引就像电话簿的内容一样。您可以在“ Hilditch,David”处打开这本书,并找到彼此相邻的所有“ Hilditch”信息。此处,聚集索引的键为(姓,名)。
这使聚簇索引非常适合基于基于范围的查询检索大量数据,因为所有数据都彼此相邻。
由于聚簇索引实际上与数据的存储方式有关,因此每个表只有一个可能(尽管您可以作弊以模拟多个聚簇索引)。
非聚集索引的不同之处在于,您可以拥有许多非聚集索引,然后它们指向聚集索引中的数据。例如,您可以在电话簿的背面有一个非聚集索引,该索引键入(城镇,地址)
想象一下,如果您必须在电话簿中搜索所有居住在“伦敦”的人-仅使用聚集索引,则由于聚集索引上的键已打开(姓氏,姓氏),结果整个伦敦的居民散落在整个索引中。
如果您在(town)上具有非聚集索引,则可以更快地执行这些查询。
希望有帮助!
一个很好的类比是将数据库索引视为书中的索引。如果您有一本关于国家的书,并且正在寻找印度,那么为什么要翻阅整本书(相当于数据库术语中的全表扫描),而只需要转到书的背面本书,它将告诉您确切的页面,您可以在其中找到有关印度的信息。同样,书索引包含页码,数据库索引包含指向该行的指针,该行包含您要在SQL中搜索的值。
索引用于加快查询的性能。它通过减少必须访问/扫描的数据库数据页的数量来实现。
在SQL Server中,聚集索引确定表中数据的物理顺序。每个表只能有一个聚集索引(聚集索引就是表)。表格上的所有其他索引称为非聚集索引。
索引都是关于快速查找数据的。
数据库中的索引类似于您在书中找到的索引。如果一本书有索引,而我要求您在该书中找到一章,则可以借助索引快速找到它。另一方面,如果该书没有索引,则您将不得不花更多的时间查找该书开头到末尾的每一页,以查找该章节。
以类似的方式,数据库中的索引可以帮助查询快速找到数据。如果您不熟悉索引,那么以下视频可能会非常有用。实际上,我从他们那里学到了很多东西。
好吧,一般指标是B-tree
。索引有两种类型:聚集索引和非聚集索引。
聚集索引创建了物理的行顺序(它只能是一个,并且在大多数情况下也是主键-如果您在表上创建主键,则也会在该表上创建聚集索引)。
非聚集索引也是二叉树,但它不会创建行的物理顺序。因此,非聚集索引的叶节点包含PK(如果存在)或行索引。
索引用于提高搜索速度。因为复杂度是O(log N)。索引是一个很大且有趣的话题。我可以说有时在大型数据库上创建索引是一种技巧。
INDEX是一项性能优化技术,可加快数据检索过程。它是与表(或视图)关联的持久性数据结构,目的是在从该表(或视图)检索数据时提高性能。
当您的查询包含WHERE过滤器时,将尤其应用基于索引的搜索。否则,即没有WHERE筛选器的查询将选择整个数据和过程。不使用INDEX搜索整个表称为表扫描。
您将以清晰可靠的方式找到Sql-Indexes的确切信息:请遵循以下链接:
索引是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 : //docs.microsoft.com/zh-cn/sql/relational-databases/indexes/clustered-and-nonclustered-indexes- describe?view = sql-server-ver15
希望这可以帮助!