創建語法:
create [unique] [clustered|nonclustered] index ix_索引名字 on 表名
(
列1 desc|asc
,列2 desc|asc)
,...
)
unique : 表示是否創建唯一索引,不是必須
聚集索引:表記錄的排列順序和與數據的存儲順序一致(主鍵),一個表只能有一個,但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
-->聚集索引規定了數據文件的存儲順序
非聚集索引:表記錄的排列順序和與數據的存儲順序不一致(唯一),一個表可以有多個
-->是一個單獨存放的指針表,用來快速找到對應點的地址
更形象的說字典的拼音目錄就是聚集索引,筆畫目錄就是非聚集索引。
相同點:都是按照索引查找.
列舉三種導致索引不生效的SQL語句寫法
(1)對索引列使用了函數或計算
假如表table1的索引列是id,但如下語句會使索引無效
select * from table1 where dbo.fn_fun(id)='xxx'
(2)對索引列使用了Like ‘%X’或Like ‘%X%’
引用上面的表,如下語句也會使索引無效
select * from table1 where id like '%xx%'
(3)在where子句中使用了In(子查詢)
如下語句會使索引無效
select * from table1 where id in (select id from table2)
(4)數據類型轉換將導致不能利用索引
如下語句會使索引無效
select * from table1 where cast(id as varchar(50))='xxx'
(5)負向比較將導致不能利用索引
如下語句會使索引無效
select * from table1 where 'xxx'=id
索引有什么不足?
缺點:過多的索引,在insert、update 和 delete 的時候增加索引的維護成本,降低並發量;