sql server索引
阿新 • • 發佈:2022-03-01
【索引型別】
唯一索引:唯一索引不允許兩行具有相同的索引值
主鍵索引:是唯一索引的特殊型別
聚集索引:表中的各行的物理順序與鍵值的邏輯(索引)順序相同
注意:一張表中值允許有一個欄位作為聚聚索引
缺點:當新增或者刪除資料時,影響更新效率,因為不管是新增還是刪除,那麼表中所有的資料會重新排序
非聚聚索引:非聚集索引指定表的邏輯順序
注意:根據資料頁來排序,一個表中可以有多個非聚集索引
【判斷索引存在則刪除】
--語法: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
【學習地址】