CHECKSUM建立索引

2022-03-22 17:17:57 字數 2003 閱讀 5162

code

/*author:浪客

location:beijing

date:getdate()

descript:利用checksum建立索引

*/select

checksum(

'我和你');

usetempdb;

godrop

table

dbo.t

create

table

dbo.t(id 

intprimary

keyidentity(1

,1),[

name

]nvarchar

(max

));--這裡我偷懶一下,自己注意在ide中,關閉,不要插入太多了.哈

while1=

1insert

into

dbo.t

select

cast

(newid

() as

nvarchar(36

))--

表 't'。掃瞄計數 1,邏輯讀取 5059 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

----

cpu 時間 = 922 毫秒,占用時間 = 918 毫秒。

setstatistics

io on

setstatistics

time 

onselect

*from

dbo.t 

where

[name]=

'6ddc1b6c-0ac3-475f-8270-ea14ae69878a

'set

statistics

time 

offset

statistics

io off

--訊息 1919,級別 16,狀態 1,第 1 行

--表 'dbo.t' 中的列 'name' 的型別不能用作索引中的鍵列。一些大資料型別列還沒發建立索引呢.怎麼搞呢?

create

index

[ix_t_name]on

dbo.t(name);

--難道我們必須要表(聚集索引)掃瞄嗎或者非全文索引,我們可以使用checksum 來做

alter

table

dbo.t 

addname_idx 

as(checksum(name))

create

index

[ix_t_name]on

dbo.t(name_idx)

--表 't'。掃瞄計數 1,邏輯讀取 6 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

----

cpu 時間 = 0 毫秒,占用時間 = 1 毫秒。

setstatistics

io on

setstatistics

time 

onselect

*from

dbo.t 

where

checksum(

'6ddc1b6c-0ac3-475f-8270-ea14ae69878a') 

=name_idx

setstatistics

time 

offset

statistics

io off

上述也只是出苗粗描了一下,建立索引的話,是不能超過900位元組

的字段的.博友可以看看我的兩篇索引的文章.

文章過後,和同事**了一下這個問題,checksum主要是用於奇偶校檢的雜湊值,但是雜湊可能會出現重複值,所以一直擔心會不會checksum存在重複值的問題,但是msdn對checksum解釋很少,也沒有具體的實現演算法...

但是今天無意中在 使用者自定義函式中,找到了類似的答案說 checksum是確定性函式,結果很明顯,我擔心的事可以散了.呵呵所以把文章頂上去...

c mysql建立索引 MySQL 建立索引

1 索引建立原則 1 搜尋的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在where子句中的列,或連線子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列。2 使用唯一索引。考慮某列中值的分布。索引的列的基數越大,索引的效果越好。3 使用短索引。如果對字串列進行索引,應該...

(索引)建立MySQL索引

建立索引的必要性 主鍵預設是建立索引的,而且具有唯一性 合適地建立索引後比不建立索引,提高了查詢速度 建立索引的語法 簡單索引 可以有重複資料 create index indexname on tablename column name 1舉例子說明如 建立乙個資料表,設定一些初始的資料,然後採用...

SQL 索引 建立索引

create index 語句用於在表中建立索引。在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。您可以在表中建立索引,以便更加快速高效地查詢資料。使用者無法看到索引,它們只能被用來加速搜尋 查詢。注釋 更新乙個包含索引的表需要比更新乙個沒有索引的表更多的時間,這是由於索引本身也需要...