當前位置:首頁 » 編程語言 » sql慢查詢優化
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql慢查詢優化

發布時間: 2022-04-11 13:24:27

sql server資料庫查詢慢怎麼優化

在安裝有SQLServer資料庫的計算機上,我們在使用資料庫的過程中,有時候會在任務管理器里發現sqlservr.exe這個進程的內存和CPU佔用率較高。

接下來我們來看一下,如何解決上面這個問題,需要設置SQLServer資料庫的內存配置。登錄資料庫,這里使用的是SQLServer2008,右鍵點擊最上方的伺服器名,在彈出的菜單中,點擊【屬性】

打開伺服器屬性窗口。默認顯示的是第一項【常規】內容,點擊第二項【內存】進行內存配置。

點擊【內存】後,打開伺服器內存選項配置界面。這里的【使用AWE分配內存】可以對內存進行擴展支持,我們要做的是更改下方的最大伺服器內存。這個數值根據自己伺服器內存大小來做適當設置。

5
個人建議設置本機內存的一半或稍微高一點,如機器內存為2G,那麼我們這里填寫1000。需要注意的是內存設置調小以後,在資料庫執行較復雜SQL語句的時候,可能會比較慢,出現這種情況,我們再適當上調最大內存配置大小。

⑵ 一條查詢極為緩慢的sql語句,如何去優化呢

1、將查詢條件欄位簡歷index;
2、將盡可能篩選掉最大數據量的條件放到where條件最後面,因為sql執行時,where條件是由右往左執行。
3、盡可能少用like、in等函數

⑶ SQL語句的幾種優化方法

1、盡可能建立索引,包括條件列,連接列,外鍵列等。

2、盡可能讓where中的列順序與復合索引的列順序一致。

3、盡可能不要select *,而只列出自己需要的欄位列表。

4、盡可能減少子查詢的層數。

5、盡可能在子查詢中進行數據篩選 。

⑷ 開發中,SQL語句優化有哪些方法

看你資料庫類型和框架是否支持。

一般開發中遇到慢SQL存在3個問題(索引健全的情況下)。

  1. 數據量多導致總行數慢,因為數據在不歸檔、遷移、轉總賬的情況下會不斷積壓。許可權越高看見的數據量就越大,數據量越大總行數就越高。一般框架是以分頁的SQL為基礎計算總行數的。這樣就會導致掃描行數高物理讀高查詢速度慢。優化方案就是總行數進行狀態歸檔,以歸檔+實時的方式展現出來

  2. 連表超過多,部分數據表是單獨的,但是不同部門的數據又有關聯性,領導要看全生命周期或者流程數據的情況下必須多表相連。這樣由於N個明細表導致笛卡兒積先不說,邏輯復雜連表多會消耗CPU,哪怕你查詢能500毫秒內顯示但是如果多人同時查就讓CPU超100%甚至做成鎖等待等堵塞。這個情況就是要用類似「雲計算」的分布式計算。通過觸發器、存儲過程等規定時間內吧業務表數據計算好並寫到展示表中,直接通過展示表進行關聯,這樣鎖表也於業務表無關,關聯表也能變少達到減少CPU消耗的目的。

  3. iops與cpu佔比高導致資料庫癱瘓。第2點看出如果CPU高資料庫全SQL都會慢,IOPS也一樣。SQL慢會導致事務中的查詢慢,解放事務變慢了其他查詢就會鎖等待狀態變成堵塞。所以遇到大規模的查詢是否先查主鍵然後通過游標一個一個計算再進臨時表。這個是消耗時間和內存換CPU和IOPS的一個例子。反正伺服器資源最高怎樣開發應該是了解的,如何管制資源之間的平衡這個很重要。

舉個例子,部分MYSQL框架喜歡一次性把資料庫都導出來,然後減少子查詢,這個演算法針對有效的基礎數據這樣是可行的。針對業務數據應該沒人會用,但是基礎數據中也可能會存在海量的情況,比如坐標軌跡、省市區、電話號碼歸屬等。如果無腦應用這個框架會導致查詢起來很慢。

⑸ 查詢特別慢 如何優化SQL

思路:

  1. 首先,要確定使用的是什麼數據,

  2. 若是MSSQL,那麼需要看一下查詢計劃,然後逐一解決慢的問題;

  3. 若是Access,那麼就要看錶的索引創建是否合適,另外Access還有一個弊病,就是資料庫大於10MB後,速度和性能將極大的下降

⑹ 一條sql執行過長的時間,你如何優化,從哪些方面

1、查看sql是否涉及多表的聯表或者子查詢,如果有,看是否能進行業務拆分,相關欄位冗餘或者合並成臨時表(業務和演算法的優化)

2、涉及鏈表的查詢,是否能進行分表查詢,單表查詢之後的結果進行欄位整合

3、如果以上兩種都不能操作,非要鏈表查詢,那麼考慮對相對應的查詢條件做索引。加快查詢速度

4、針對數量大的表進行歷史表分離(如交易流水表)

5、資料庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至於主從同步,mysql有自帶的binlog實現 主從同步

6、explain分析sql語句,查看執行計劃,分析索引是否用上,分析掃描行數等等

7、查看mysql執行日誌,看看是否有其他方面的問題

個人理解:從根本上來說,查詢慢是佔用mysql內存比較多,那麼可以從這方面去酌手考慮

⑺ SQL子查詢過多查詢速度太慢如何優化

先行轉列行不行呢,以第一張表為例
select proctguid,
max(case when num=1 then description end) tz1,
max(case when num=2 then description end) tz2,
max(case when num=3 then description end) tz3,
max(case when num=4 then description end) tz4,
max(case when num=5 then description end) tz5
from proct_description
group by proctguid
然後再join,用proctguid和原表關聯,這樣上面就只需要寫
select p.*,tz1,tz2,tz3,tz4,tz5 from 了

⑻ SQL語句執行太慢,怎麼優化

Try this:

select storage.prodcode, sum(case when billsale.prod_number is null then 0 else billsale.prod_number end) as '已銷售數量'
from storage left join billsale on billsale.prodcode=storage.prodcode
group by storage.prodcode

⑼ 如何優化慢查詢的SQL語句

優化方法一般從幾個方面這幾個考慮:
1、根據業務情況,精簡代碼邏輯,
2、根據讀寫方式,降低數據表讀寫量
3、關鍵條件列增加合適的索引
4、對於碎片多的索引進行重建
多數情況下只需要考慮前兩條就能解決很大的效率問題,業務模式可能在最初開發的時候,因需求分析不徹底,或者需求理解不深入,導致邏輯不合理,或者後續多次變動業務模式,新增功能與最初的開發理念發生變化,這時就應該對代碼的邏輯進行重新優化改寫。