1、 查詢出的數據量過大(可以采用多次查詢,其他的方法降低數據量),盡量采取分頁查詢數據 2、鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷) 3、返回了不必要的行和列 用OR的字句可以分解成多個查詢,并且通過UNION鏈接多個查詢。它們的速度只
1、 查詢出的數據量過大(可以采用多次查詢,其他的方法降低數據量),盡量采取分頁查詢數據
2、鎖或者死鎖(這也是查詢慢最常見的問題,是程序設計的缺陷)
3、返回了不必要的行和列
用OR的字句可以分解成多個查詢,并且通過UNION鏈接多個查詢。它們的速度只與是否使用索引有關,如果查詢需要用到聯合索引,用UNION all執行的效率更高。
4、如果是使用like進行查詢的話,簡單的使用index是不行的,但是全文索引,耗空間。 like 'a%' 使用索引 like '%a' 不使用索引用 like '%a%' 查詢時,查詢耗時和字段值總長度成正比,所以不能用CHAR類型,而是VARCHAR。對于字段的值很長的建全文索引。
5、 盡量將數據的處理工作放在服務器上,減少網絡的開銷,如使用存儲過程。存儲過程是編譯、優化過,并且被組織到一個執行規劃里,且存儲在數據庫中的SQL語句(存儲過程是數據庫服務器端的一段程序),是控制流語言的集合,速度當然快。
6、將需要查詢的結果預先計算好放在表中,查詢的時候再Select。這在SQL7.0以前是最重要的手段。例如計算商品購買小計計算。
7、沒有必要時不要用DISTINCT和ORDER BY,這些動作可以改在客戶端執行。它們增加了額外的開銷。這同UNION和UNION ALL一樣的道理。
8、一次更新多條記錄比分多次更新每次一條快,就是說批處理好
9、用臨時表,盡量用結果集和Table類性的變量來代替它,Table 類型的變量比臨時表好
10、數據庫設計:數據庫內所有表結構均添加索引
調整原因:
近日數據庫壓力很大,經查有些大數據量表的查詢速度很慢,導致數據庫服務器CPU一直持續90%-100%,將這些表添加索引后,CPU很快變正常。
根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用字節數小的列建索引好(參照索引的創建),不要對有限的幾個值的字段建單一索引如性別字段
11、 將大數據表做分庫、分區處理:
具體操作如下:
1)、將大數據表與主數據庫分離,單獨新建一個數據庫,然后將這些表做分區;
2)、將數據插入到消息隊列內,后臺利用windows計劃任務執行(5分鐘執行一次)C#控制臺程序將消息隊列內的數據批量(消息隊列內有50000條記錄,一次性插入到數據表內)插入到相應的數據表內;
調整原因:
例如:用戶訪問日志,每次用戶訪問一個頁面的時候我們之前的操作是直接將數據插入數據庫,這樣做對數據庫的訪問及操作太大,嚴重影響其他數據插入、查詢的效率,利用分庫、分區、消息隊列完成此操作的好處是用戶訪問頁面的時候不直接對數據庫操作,而是在消息隊列內積累一定數量的數據后批量插入數據庫,只執行一次數據庫操作,而且因為數據庫分離的原因,對其他的查詢及插入不會有影響;
本文為個人經實際工作經驗和收集總結整理,寫得不到之處請給出寶貴意見,謝謝。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com