sql server索引
【索引类型】
唯一索引:唯一索引不允许两行具有相同的索引值
主键索引:是唯一索引的特殊类型
聚集索引:表中的各行的物理顺序与键值的逻辑(索引)顺序相同
注意:一张表中值允许有一个字段作为聚聚索引
缺点:当新增或者删除数据时,影响更新效率,因为不管是新增还是删除,那么表中所有的数据会重新排序
非聚聚索引:非聚集索引指定表的逻辑顺序
注意:根据数据页来排序,一个表中可以有多个非聚集索引
【判断索引存在则删除】
--语法:sysindexes表是存系统的索引表
if exists(select*from sysindexes where name='索引名')
drop 表名.索引名
go
--示列
if exists(select*from sysindexes where name='idx_dapperdata_email') drop index dapper_data.idx_dapperdata_email go
【创建索引sql语法】
非聚集索引:
---fillfactor 0--100:表示索引页填充的百分比 设置填充因子的值,如果设置为100表示,把每个索引页都要填充满,这会降低新增数据的时候的效率,尽量不要让索引页每页都填满
create nonclustered index 索引名
on 表名称(字段名)
with fillfactor=30
---给dapp_data表的email字段创建名字叫做idx_dapperdata_email的非聚集索引
create nonclustered index idx_dapperdata_email on dapper_data(email) with fillfactor=30
【删除索引】
---语法
drop index 表名.索引名称
---示列
drop index dapper_data.idx_dapperdata_email
【索引查询】
---语法
select*from 表名 with(index=索引名) where 条件
--示范:可以直接查询,没必要加索引名
select*from DAPPER_DATA with(index=idx_dapperdata_email) where email like'dfothergill0%'
【索引的优缺点】
优点:加快访问速度,加强行的唯一性
缺点:带索引的表在数据库中需要更多的存储空间,操作数据的命令需要更长的处理时间,
因为它们需要对索引进行更新;
【索引索引注意事项】
- 查询时减少使用*返回全部列,不要返回不需要的列
- 索引应该尽量小,在字节数小的列上建立索引
- where子句中有多个条件表达式时,包含索引的表达式应置于其他体条件之前
- 避免在order by子句中使用表达式
- 根据业务数据发生频率,定期重新生成或重新组织索引,进行锁片整理
- name like‘%章’,这种索引不起作用,name like‘章%’这种name索引起作用
- name=‘张三’and 价格>300 ,name 索引起作用,name=‘张三’or 价格>300 ,name索引不起作用,因为or会引起全部扫描,同理,in 和or的的会引起全表扫码selec*from table1 where name in(‘小李’,‘小张’)和select*from table1 where name=‘小李’ or name'小章'是等价的,即便name上有索引,索引也不起作用
- 少用not
- 参考文献:SQL Server - 索引详细教程 (聚集索引,非聚集索引) - frank_cui - 博客园 (cnblogs.com)
【查看索引】
-----查看表的索引信息
exec sp_helpindex 表面或视图名
----使用视图sys.indexes 查看索引
select*from sys.indexes
--查看myschool数据库中全部索引信息
use myschool
select*from sys.indexes
【学习地址】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了