1. 一個sql有時執行速度很快有時很慢,請問處理思路
原因有很多的。
主鍵約束。
當數據量達到百萬以上的時候,你用主鍵去搜索某一條數據時速度是極快的。但當你不用主鍵去搜索的時候速度就降了幾十倍甚至上百倍,這個是主鍵的好處。
索引。
當你的表欄位設置有索引的時候,搜索速度比不創建索引要快幾倍至幾十倍。
sql語句不夠優化。
在查詢某數據的時候,能不用*就盡量不用,想要哪個欄位就查哪個,多餘的不要,這樣就能達到數據傳輸精簡化,讓查詢速度也能快上許多。
多表聯合查詢。
在大數據量的時候這個多表查詢盡量不用,畢竟是很耗內存的,寧願用其他語言循環執行簡單的 select 欄位 from 表名 where 條件 這樣的簡單sql語句,這樣也能加快速度。
其他方面還有很多的,比如伺服器的原因呀,資料庫表結構類型呀。。。我就不多說了。
2. SQL 語句執行感覺很慢,怎麼回事
到這個數量級的全部更新,肯定會很慢。
第一。你的記錄不一定在同一個partition,
第二。不明白為什麼那麼多人建議你建索引,你建的索引越多,你的更新速度越慢,因為你更新記錄的同時,還有更新索引。
第三。你必須知道更新速度慢的瓶頸在哪裡。是讀寫太多,還是內存不夠,還是CUP不夠快,然後對症下葯。
下面介紹兩個簡單的辦法,也許有效:
第一:
把這個100W行的表縱向劈成兩個,用外鍵關系連接,一個裝小的,經常改變的數據比如ID,外鍵,狀態值,時間等,另一個裝大的,不經常改變的數據,比如很長的字元串,xml,text 等。
這樣更新時操作小的這個表,可以大大節約內存和CPU 開銷,降低磁碟操作。
壞處就是查詢時會慢些。
第二:
把這100W行橫向切成很多個表,比如每個月的記錄裝在一個表裡,這樣每個表的記錄數可能只有幾萬,查詢,更新都會快很多。
壞處是查詢,更新都不如原來好寫。
3. SQL SERVER資料庫響應很慢一般都有哪些原因
資料庫最主要的就是資料庫設計冗餘,還是sql語句之類的,還有就是用存儲過程比一般的sql語句快等到;其次就是編程代碼的問題,例如if
else
if
else
if
else這個判斷的,如果用switch的話就會快很多
4. sql數據查詢反映很慢
這個問題我也遇見過,慢的話也正常,因為數據比較多
解決辦法啊,首先從表考慮,可以針對這個表建索引,
然後的話說優化查詢語句,可以的話添加 with (nolock);即select * from A with (nolock) 這樣
然後就是where條件了,盡量不要使用like,in這些。盡量添加where條件。
這樣應該可以了,還不行的話,上網查查怎麼優化DB。
5. 資料庫MSSQL運行慢是什麼原因
(1) 可以考慮一下索引的問題
對在你的SQL語句中WHERE子句里涉及的列, 設置為索引列, 將極大提高你的訪問性能. 特別是頻繁訪問的表,更應該注意這個問題.
(2) 考慮存儲過程的使用
對經常訪問或連續操作的SQL語句,可以考慮放在存儲過程中處理, 由於存儲過程是預編譯的, 一般可以提高速度
(3) 考慮"事務"的問題
事務中的SQL語句,在提交前會鎖定相關的表,使其無法訪問,直到提交為止
(4) 考慮你的連接方式, 是否用到了連接池, 一般連接池的合理使用會提高你的速度及程序的可用性.
6. 請教SQL表查詢慢的原因
查詢慢是和表結構,語句,系統等相關的 建索引等方法都可以改善表結構, 另外如果返回數據量很大,當然會慢,所以你盡量查詢相對有用的數據 再就是查詢語句了 比如用in查詢沒有jion查詢快,還有 between 改成 > <會快 再還有,用子查詢也會慢很多, 如果是一些很復雜的查詢,可以改用存儲過程會好點,有時用臨時表會慢但,從海量數據中查詢取數進行子查詢又不如用臨時錶快,不同的問題用不同的解決方法,看你要哪種了,單看你的問題無法直接判斷。 不過,優化查詢句是關鍵的了。
7. 急死了!sql資料庫訪問很慢
e5504是不是不如e5450資料庫方面快不了多少的!
看你內存和其他硬體都不錯,CPU也不會差到哪裡去的。
在訪問小數量的數據時,根本感覺不到MS sql server的快呢
8. SQL語句執行很慢,怎麼回事
1. 執行計劃中明明有使用到索引,為什麼執行還是這么慢?
2. 執行計劃中顯示掃描行數為 644,為什麼 slow log 中顯示 100 多萬行?
a. 我們先看執行計劃,選擇的索引 「INDX_BIOM_ELOCK_TASK3(TASK_ID)」。結合 sql 來看,因為有 "ORDER BY TASK_ID DESC" 子句,排序通常很慢,如果使用了文件排序性能會更差,優化器選擇這個索引避免了排序。
那為什麼不選 possible_keys:INDX_BIOM_ELOCK_TASK 呢?原因也很簡單,TASK_DATE 欄位區分度太低了,走這個索引需要掃描的行數很大,而且還要進行額外的排序,優化器綜合判斷代價更大,所以就不選這個索引了。不過如果我們強制選擇這個索引(用 force index 語法),會看到 SQL 執行速度更快少於 10s,那是因為優化器基於代價的原則並不等價於執行速度的快慢;
b. 再看執行計劃中的 type:index,"index" 代表 「全索引掃描」,其實和全表掃描差不多,只是掃描的時候是按照索引次序進行而不是行,主要優點就是避免了排序,但是開銷仍然非常大。
Extra:Using where 也意味著掃描完索引後還需要回表進行篩選。一般來說,得保證 type 至少達到 range 級別,最好能達到 ref。
在第 2 點中提到的「慢日誌記錄Rows_examined: 1161559,看起來是全表掃描」,這里更正為「全索引掃描」,掃描行數確實等於表的行數;
c. 關於執行計劃中:「rows:644」,其實這個只是估算值,並不準確,我們分析慢 SQL 時判斷准確的掃描行數應該以 slow log 中的 Rows_examined 為准。
4. 優化建議:添加組合索引 IDX_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID)
優化過程:
TASK_DATE 欄位存在索引,但是選擇度很低,優化器不會走這個索引,建議後續可以刪除這個索引:
select count(*),count(distinct TASK_DATE) from T_BIOMA_ELOCK_TASK;+------------+---------------------------+| count(*) | count(distinct TASK_DATE) |+------------+---------------------------+| 1161559 | 223 |+------------+---------------------------+
在這個 sql 中 REL_DEVID 欄位從命名上看選擇度較高,通過下面 sql 來檢驗確實如此:
select count(*),count(distinct REL_DEVID) from T_BIOMA_ELOCK_TASK;+----------+---------------------------+| count(*) | count(distinct REL_DEVID) |+----------+---------------------------+| 1161559 | 62235 |+----------+---------------------------+
由於有排序,所以得把 task_id 也加入到新建的索引中,REL_DEVID,task_id 組合選擇度 100%:
select count(*),count(distinct REL_DEVID,task_id) from T_BIOMA_ELOCK_TASK;+----------+-----------------------------------+| count(*) | count(distinct REL_DEVID,task_id) |+----------+-----------------------------------+| 1161559 | 1161559 |+----------+-----------------------------------+
在測試環境添加 REL_DEVID,TASK_ID 組合索引,測試 sql 性能:alter table T_BIOMA_ELOCK_TASK add index idx_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID);
添加索引後執行計劃:
這里還要注意一點「隱式轉換」:REL_DEVID 欄位數據類型為 varchar,需要在 sql 中加引號:AND T.REL_DEVID = 000000025xxx >> AND T.REL_DEVID = '000000025xxx'
執行時間從 10s+ 降到 毫秒級別:
1 row in set (0.00 sec)
結論
一個典型的 order by 查詢的優化,添加更合適的索引可以避免性能問題:執行計劃使用索引並不意味著就能執行快。
9. 為什麼我的SQL資料庫變的很慢
如果開始的時候不是這樣,那應該是數據量過大,你可以考慮備份部分數據,然後再刪掉資料庫中的數據;還有可能就是你電腦軟體裝多了,使電腦變慢了;當然,也很有可能是中毒了,殺殺毒試試
10. SQL優化,哪個大神能幫我優化一下SQL 執行需要30分鍾以上太慢了,只有10000多數據
表面上看不出啥問題來。需要你自己測試一下。
1:序列獲取值應該沒啥問題。
2:insert 語句 應該在秒級別,測試一下 性能。
3:update語句重點測試一下,語句和數據量有點關系,和建立的索引 有點關系。
注釋一些語句塊,分別測試,別人沒法測試
以目前的數據量
正常應該在幾秒。