9、字段提取要按照「需多少、提多少」的原則,避免「select *」
我們來做乙個試驗:
select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc
用時:4673毫秒
select top 10000 gid,fariqi,title from tgongwen order by gid desc
用時:1376毫秒
select top 10000 gid,fariqi from tgongwen order by gid desc
用時:80毫秒
由此看來,我們每少提取乙個字段,資料的提取速度就會有相應的提公升。提公升的速度還要看您捨棄的字段的大小來判斷。
10、count(*)不比count(字段)慢
某些資料上說:用*會統計所有列,顯然要比乙個世界的列名效率低。這種說法其實是沒有根據的。我們來看:
select count(*) from tgongwen
用時:1500毫秒
select count(gid) from tgongwen
用時:1483毫秒
select count(fariqi) from tgongwen
用時:3140毫秒
select count(title) from tgongwen
用時:52050毫秒
從以上可以看出,如果用count(*)和用count(主鍵)的速度是相當的,而count(*)卻比其他任何除主鍵以外的字段彙總速度要快,而且欄位越長,彙總的速度就越慢。我想,如果用count(*), sql server可能會自動查詢最小字段來彙總的。當然,如果您直接寫count(主鍵)將會來的更直接些。
11、order by按聚集索引列排序效率最高
我們來看:(gid是主鍵,fariqi是聚合索引列)
select top 10000 gid,fariqi,reader,title from tgongwen
用時:196 毫秒。 掃瞄計數 1,邏輯讀 289 次,物理讀 1 次,預讀 1527 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc
用時:4720毫秒。 掃瞄計數 1,邏輯讀 41956 次,物理讀 0 次,預讀 1287 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc
用時:4736毫秒。 掃瞄計數 1,邏輯讀 55350 次,物理讀 10 次,預讀 775 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc
用時:173毫秒。 掃瞄計數 1,邏輯讀 290 次,物理讀 0 次,預讀 0 次。
select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc
用時:156毫秒。 掃瞄計數 1,邏輯讀 289 次,物理讀 0 次,預讀 0 次。
從以上我們可以看出,不排序的速度以及邏輯讀次數都是和「order by 聚集索引列」 的速度是相當的,但這些都比「order by 非聚集索引列」的查詢速度是快得多的。
同時,按照某個字段進行排序的時候,無論是正序還是倒序,速度是基本相當的。
12、高效的top
事實上,在查詢和提取超大容量的資料集時,影響資料庫響應時間的最大因素不是資料查詢,而是物理的i/0操作。如:
select top 10 * from (
select top 10000 gid,fariqi,title from tgongwen
where neibuyonghu='辦公室'
order by gid desc) as a
order by gid asc
到此為止,我們上面討論了如何實現從大容量的資料庫中快速地查詢出您所需要的資料方法。當然,我們介紹的這些方法都是「軟」方法,在實踐中,我們還要考慮各種「硬」因素,如:網路效能、伺服器的效能、作業系統的效能,甚至網絡卡、交換機等。
資料庫優化策略 二
1 要合理使用索引 索引是資料庫乙個重要的構成部分,很多人都會忽略它,其實索引的根本目的就是 為了提高查詢效率。使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則 由優化器自動生成索引。在頻繁進行排序或分組 即進行group by或order by操作 的列上建立...
資料庫優化策略 三
1 避免使用不相容的資料型別。例如float和int char和varchar binary和varbinary是不相容的。資料型別的不相容可能使優化器無法執行一些本來可以進行的優化操作。例如 select name from employee where salary 60000 在這條語句中,如...
資料庫 索引優化策略
關於什麼是索引,如何建立索引,索引的優缺點等,請移步我的另外一篇文章mysql索引簡談 一句話,為了加快查詢效率。注意這裡的 查詢 而不是增刪改。建立索引的列,一旦發生了增加 更新或刪除操作,索引是需要維護的,此外不宜建立大量的索引,索引也占用磁碟空間。建立索引,應該權衡 查詢 與 磁碟占用 維護索...