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

 

【学习地址】

SQL Server数据库高级教程 | 邯郸翱翔教育_哔哩哔哩_bilibili

posted @ 2022-03-01 13:45  程序杨%  阅读(129)  评论(0编辑  收藏  举报