标签归档:索引

mssql sqlserver SQL索引简介(聚集索引和非聚集索引)说明


摘要:
下文着重讲解sql索引的相关知识,如下所示:


索引简介

索引是数据库中对列值按照一定的顺序进行排列组合,方便人们快速定位数据位置的一种数据结构。
索引会占用数据库的物理存储空间。
每次数据插入和修改,如果此列数值涉及索引相关信息,则索引结构都会随之发生变化,所以索引越多,对数据的插入影响越大。
例:

     select keyId,info from [maomao365.com]
	    where keyId =98
   

如果数据表 maomao365.com没有建立关于keyId列的相关索引,那么检索此数据一定会涉及全表扫描,这样查询方式是一种低效的查询方式,所以我们应该在keyId上建立相应的索引,
使我们检索数据时,可以通过索引快速定位到数据指定的位置,提高数据的检索效率。

索引分类:
索引分为 聚集索引和非聚集索引


聚集索引:

聚集索引: 指物理存储的数据按照索引的顺序依次排列存放,例我们建立一张数据表,设置标识列为聚集索引,那么这张表上的数据就会按照聚集索引的顺序进行存放,
当我们检索前n条数据时,只需按照物理顺序 依次找出数据的位置,从物理存储的顺序上,我们可以看出聚集索引对批量展示的数据加载数据比较快。

另:
由于聚集索引决定了数据的物理存储顺序,那么一张数据表有且只有一个聚集索引。


非聚集索引:

非聚集索引:
为数据表建立一个目录。
例:
新华字典中的 按部首查字 按拼音查字 等这些都可以称之为“新华字典”的索引。
这些索引建立的主要目的是为了方便人们快速查询数据,可以通过索引直接定位到具体数据的位置。
我们可以看出 非聚集索引对物理表没有任何改变,只是单独开辟一块空间,按照自己的规则建立一套目录存储自身的信息和实际表中的数据映射,当我们查询数据时,首先在目录中找到信息的位置,然后再定位至数据表的实际位置。

mssql sqlserver查看索引大小的3种方法分享


摘要:
下文讲述sqlserver中查看索引大小的三种方法,如下所示:
实验环境:sql server 2008 R2


实现思路:
1.使用系统存储过程“sp_spaceused”查看
2.通过查看系统视图 sys.indexes 获取索引大小

    /*
查看数据表 adminset 
下的索引信息
*/
sp_spaceused 'adminset'

SELECT
  i.name                  AS [索引名称],
  SUM(s.used_page_count) * 8   AS [索引大小KB]
FROM sys.dm_db_partition_stats  AS s 
JOIN sys.indexes                AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('adminset') 
GROUP BY i.name
ORDER BY i.name

SELECT
    i.name              AS [索引名称],
    SUM(page_count * 8) AS [索引大小KB]
FROM sys.dm_db_index_physical_stats(
    db_id(), object_id('adminset'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name

mssql_sqlserver_获取数据库上索引大小的三种方法

mssql_sqlserver_获取数据库上索引大小的三种方法



注意事项:
 查看整个数据库中的索引大小
1. sp_spaceused 函数后面不输入表名
2.将sys.dm_db_index_physical_stats中的object_id(‘adminset’)替换为NULL
  3.WHERE s.[object_id] = object_id(‘adminset’) 查询条件禁用

相关阅读:
sp_spaceused关键字使用
mssql sqlserver 系统表sys.indexes简介说明
sql server动态存储过程 sys.dm_db_index_physical_stats 功能简介
sqlserver 查询当前数据库下所有表的占用空间的方法分享

如何使用“sql脚本”禁用表索引呢?


摘要:
下文通过举例的方式讲述sqlserver中禁用索引约束的方法,如下所示:
实验环境:sql server 2018R2

--操作步骤如下:
  --1.打开SSMS并连接到相应的数据库引擎上
  
  --2.连接到相应的数据库上
     use [数据库名称]

  --禁用单条索引的脚本
  ALTER INDEX [索引名称] ON [数据表名称] 
    DISABLE;  
  --禁用整张表索引的脚本  
   ALTER INDEX ALL ON [数据表名称]   
     DISABLE;   

相关阅读:
使用sql脚本禁用索引详细举例
sqlserver 启用索引的方法
在SQL Server 2005和SQL Server 2008禁用和启用索引的方法