SQL建立索引


if exists (select * From sysindexes where name='IX_CLASS_TNAME')
drop index classinfo.IX_CLASS_TNAME

create nonclustered index IX_CLASS_TNAME
on classinfo(objexplain)
with fillfactor=30
go


declare @d datetime
set @d=getdate()

SELECT objexplain as 索引 FROM classinfo(index=IX_CLASS_TNAME) WHERE objexplain like '%班%'    --指定按‘IX_CLASS_TNAME’索引查询

select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())


declare @d1 datetime
set @d1=getdate()

SELECT objexplain as 没用索引 FROM classinfo WHERE objexplain like '%班%' 

select [执行时间]=datediff(ms,@d1,getdate())

 

drop table test

create table test(
  id int primary key
 )
go
insert into test values (1 )
insert into test values (2 )
insert into test values (3 )
insert into test values (4 )
insert into test values (8 )
insert into test values (6 )
insert into test values (8 )
insert into test values (9 )
insert into test values (7)
insert into test values (12)
insert into test values (13)
insert into test values (14)
insert into test values (18)
insert into test values (22)
go

 

select * From test

/*得出三个数据连续数中的开始不连续的数值*/
select * From (select id,(select min(id) from test where id>t.id)id2 from test t) t where id2-id>1

### 什么是 SQL 索引SQL 索引是一种数据库对象,用于提高查询效率。索引类似于书籍的目录,它允许数据库系统快速定位到表中的特定数据行,而无需扫描整个表[^1]。 索引的核心作用是优化数据检索的速度。当没有索引时,数据库必须进行全表扫描,即逐行检查以找到匹配的数据。这种操作在大数据量的情况下会导致性能下降。通过创建适当的索引,可以显著减少查询所需的时间和资源消耗[^2]。 --- ### 索引的作用与目的 #### 提高查询速度 索引的主要目的是加速数据访问。例如,在一个包含数百万条记录的用户表中,如果经常需要根据用户名查找用户信息,则在 `username` 字段上建立索引可以大幅减少查询时间。数据库可以直接跳转到相关记录,而不是逐行扫描整个表[^3]。 #### 加速连接操作 在涉及多个表的连接查询(如 `JOIN` 操作)时,索引可以加快关联字段的匹配过程。例如,若两个表通过 `role_id` 进行连接,则在该字段上建立索引可提升连接效率[^4]。 #### 支持唯一性约束 某些类型的索引(如唯一索引)不仅提高查询性能,还能确保数据的完整性。例如,使用 `CREATE UNIQUE INDEX` 可防止在指定列中插入重复值,从而保证数据的一致性和准确性[^4]。 #### 排序与分组优化 索引还可以优化 `ORDER BY` 和 `GROUP BY` 操作的执行效率。如果排序或分组字段已经建立索引,数据库可以直接利用索引的有序结构,避免额外的排序操作。 --- ### 不同类型索引的目的 #### 聚集索引 聚集索引决定了表中数据的物理存储顺序。一个表只能有一个聚集索引,因为它直接影响了数据的排列方式。例如,若在一个用户表上对 `user_id` 建立聚集索引,则数据库将按照 `user_id` 的顺序来组织存储数据[^2]。 #### 非聚集索引 非聚集索引不改变数据的实际存储顺序,而是维护一个独立的结构,指向数据行的位置。它的作用类似于字典的部首索引:虽然索引项是按一定顺序排列的,但它们所对应的记录可能分散在不同的物理位置上[^3]。 #### 唯一索引 唯一索引用于确保某列或组合列中的值是唯一的,常用于主键或唯一约束字段。它可以防止重复值的插入,从而保障数据一致性[^4]。 --- ### 创建索引的语法示例 以下是一些常见的索引创建方法: ```sql -- 创建聚集索引 CREATE CLUSTERED INDEX idx_role_id ON roles(role_id); ``` ```sql -- 创建唯一索引 CREATE UNIQUE INDEX idx_username ON users(username); ``` ```sql -- 修改表结构添加索引 ALTER TABLE mount_info ADD INDEX idx_role_id (role_id); ``` ```sql -- 创建表时直接指定索引 CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50), INDEX idx_username (username) ); ``` --- ### 总结 SQL 索引建立旨在提高查询性能、支持高效连接、实现唯一性约束以及优化排序和分组操作。合理使用索引可以显著提升数据库系统的响应速度和吞吐量,但同时也需要注意索引的维护成本,避免过度索引带来的负面影响。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值