goset statistics time on
select count([styleid]) from [dbo].[ky_style]
set statistics time off
set statistics time on
select count(*) from [dbo].[ky_style]
set statistics time off
set statistics time on
select count(*) as h from [dbo].[ky_style]
set statistics time off
(1行受影響)
cpu 時間 = 687 毫秒,占用時間 = 925
毫秒。(
1行受影響)
cpu 時間 = 594 毫秒,占用時間 = 594
毫秒。(
1行受影響)
cpu 時間 = 594 毫秒,占用時間 = 688 毫秒。
1.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃瞄。
不太準確,在sql server 2008測試過,不等於也可以走索引查詢的,主要取決於返回的列是不是索引鍵,以及返回的行數在表中總行數的比率;
3.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如:
select id from t where num is null
可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
錯誤,既然給了用例,那麼就很好測試了,is null可以走索引查詢的;
4.應盡量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄,如:
select id from t where num=10 or num=20
可以這樣查詢:
select id from t where num=10
union all
select id from t where num=20
不太準確
,是否全表掃瞄看or裡的條件的,如果條件都能走索引查詢,那就沒必要全表掃瞄了,而且用union或者union all也存在這個問題;
6.in 和 not in 也要慎用,否則會導致全表掃瞄,如:
select id from t where num in(1,2,3)
對於連續的數值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
錯誤,sql謂詞只是代表語義,通常不會代表執行計畫;
7.如果在 where 子句中使用引數,也會導致全表掃瞄。因為sql只有在執行時才會解析區域性變數,但優化程式不能將訪問計畫的選擇推遲到執行時;它必須在編譯時進行選擇。然 而,如果在編譯時建立訪問計畫,變數的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃瞄:
select id from t where num=@num
可以改為強制查詢使用索引:
select id from t with(index(索引名)) where num=@num
錯誤,引數化當然可以走索引查詢;
20.盡量使用表變數來代替臨時表。如果表變數包含大量資料,請注意索引非常有限(只有主鍵索引)。
不知道用意何在,表變數不支援索引,沒有統計資訊,而且超過固定大小,表變數也會存到tempdb和臨時表一樣;
21.避免頻繁建立和刪除臨時表,以減少系統表資源的消耗。
不知道用意何在,
會話結束,臨時表自動釋放的;
23.在新建臨時表時,如果一次性插入資料量很大,那麼可以使用 select into 代替 create table,避免造成大量 log,以提高速度;如果資料量不大,為了緩和系統表的資源,應先create table,然後insert。
不太準確,以前確實是這樣的,但是insert...select從2008開始,和select...into一樣日誌最小化了;
24.如果使用到了臨時表,在儲存過程的最後務必將所有的臨時表顯式刪除,先 truncate table ,然後 drop table,這樣可以避免系統表的較長時間鎖定。
未測試,先不說,嘿嘿
30.盡量避免大事務操作,提高系統併發能力。
不太準確,
用大事務還是小事務,還是得看,對於單個使用者重複n次提交,肯定是用1個大事務更快,因為只有一次commit;對於對個使用者併發,一般是希望事務越短小越好。
mysql大資料建立索引 1000W
重新新增索引,對於1000w級的資料,按常規的方式來操作,時間上是乙個很大的問題。而且對於1000w級的資料,本人建議對此表進行分表優化。如果非要新增索引操作,方法倒是有的。1.建立乙個新的表結構 create table a new like a 2.對 a new 表進行索引建立。3.在mysq...
W 資料庫基礎
資料庫系統由三部分組成 資料庫 db 資料庫管理系統 dbms 和資料庫應用系統 資料加是用來儲存資料的,裡面儲存兩大類資料 使用者資料及系統資料 資料字典,具體為系統中的使用者以及使用者孤許可權,各種統計資訊等 資料庫是長期儲存在計算機內有組織和可共享的資料集合 每種dbms都支援一種資料模型,主...
MSSQL資料庫注入
用下面的這種方法暫時解決了,目前為止沒有再出現插入了 在global.asax檔案下面加入如下 希望能管用.針對.net region sql注入式攻擊 分析 處理使用者提交的請求 分析使用者請求是否正常 傳入使用者提交資料 返回是否含有sql注入式攻擊 private bool processsq...