排序操作一般都是在記憶體裡進行的,對於資料庫來說是一種
cpu的消耗,曾在
pc機做過測試,單核普通
cpu在
1秒鐘可以完成
100萬條記錄的全記憶體排序操作,所以說由於現在
cpu的效能增強,對於普通的幾十條或上百條記錄排序對系統的影響也不會很大。但是當你的記錄集增加到上萬條以上時,你需要注意是否一定要這麼做了,大記錄集排序不僅增加了
cpu開銷,而且可能會由於記憶體不足發生硬碟排序的現象,當發生硬碟排序時效能會急劇下降,這種需求需要與
dba溝通再決定,取決於你的需求和資料,所以只有你自己最清楚,而不要被別人說排序很慢就嚇倒。
以下列出了可能會發生排序操作的
sql語法:
order by
功能 :按照指定列排序。
group by
功能:分組
原理:按照指定列排序後相同的分到一組。
distinct
功能:去除重複的列
原理:將字段排序後前一行資料和後一行資料比較如果完全相同則去掉後一行,不完全相同則跳到下一行再開始
exists
和 not exists
子查詢
功能:略
原理:先查詢主查詢的記錄,然後排序,再與子查詢的記錄比較,選出符合條件的記錄。 in
和 not in
子查詢
功能:略
原理:先查詢主查詢的記錄,然後排序,再與子查詢的記錄比較,選出符合條件的記錄。 in
和 not in
子查詢
功能:略
原理:先查詢子查詢的記錄,然後排序,再與主查詢的記錄比較,選出符合條件的記錄。
union
(並集)
功能:合併兩個表的資料並去掉重複資料
原理:將兩個表排序後合併,去掉重覆記錄。
注: union all
也是一種並集操作,但是不會發生排序,如果你確認兩個資料集不需要執行去除重複資料操作,那請使用
union all
代替 union。
merge into
功能:利用乙個表更新另乙個表的記錄。根據條件,若匹配更新資料,若不匹配,則插入資料
原理:將需要更新的表和資料表按匹配條件的列排序,若相等,更新資料,若不相等插入資料
上面是會產生排序的一些操作,沒有必要,我們要盡量避免排序。如果非要排序,那麼排序盡量在最後進行。
合理使用索引
索引是資料庫中重要的資料結構,它的根本目的就是為了提高查詢效率。現在大多數的資料庫產品都採用ibm最先提出的isam索引結構。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引。在頻繁進行排序或分組 即進行group b...
合理使用快取
乙個優秀的專案,其中必然使用到了快取機制 乙個 遇到效能瓶頸是,第乙個解決方案一般是使用快取,快取的應用面特別廣,無論是客戶端,還是應用伺服器,或是儲存伺服器。快取一般存放讀寫比價頻繁,變化較少的資料,應用程式讀取資料時先從快取中讀取資料,獲取不到再訪問資料庫,再放到快取中,以便於下次快速獲取。快取...
合理使用Blob Clob
用了十多年的資料庫,工作需要也經常要幫忙資料庫效能調優。這裡簡單列一些我平時工作時用資料庫的體會和心得 介紹 雖然資料庫原生支援blob 二進位製大物件 和clob 字串大物件 但是從效能的考慮,我們把這些內容放在資料庫裡面不合適的。比如說我有1個100多m的 blob 或者說我有一大段文字 clo...