收縮資料庫
一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大
1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如論壇資料庫Forum)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存
2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定
3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據
Ⅱ 為什麼我的SQL資料庫變的很慢
如果開始的時候不是這樣,那應該是數據量過大,你可以考慮備份部分數據,然後再刪掉資料庫中的數據;還有可能就是你
電腦軟體
裝多了,使電腦變慢了;當然,也很有可能是中毒了,殺殺毒試試
Ⅲ 為什麼我的SQL資料庫變的很慢
如果開始的時候不是這樣,那應該是數據量過大,你可以考慮備份部分數據,然後再刪掉資料庫中的數據;還有可能就是你電腦軟體裝多了,使電腦變慢了;當然,也很有可能是中毒了,殺殺毒試試
Ⅳ sql server打開表非常慢
我覺得樓上的可能沒有看清書樓主的問題,樓主是用sql
server打開的,也就是應該用企業管理器打開的,而且重新啟動以後速度會很快,然後逐漸變慢,如果樓主能排除自身硬體問題,我想,有如下可能:
1,有病毒,佔用內存
2,sqlserver版本可能有問題,嘗試重新安裝,打上sp4補丁
Ⅳ SQL SERVER資料庫響應很慢一般都有哪些原因
資料庫最主要的就是資料庫設計冗餘,還是sql語句之類的,還有就是用存儲過程比一般的sql語句快等到;其次就是編程代碼的問題,例如if
else
if
else
if
else這個判斷的,如果用switch的話就會快很多
Ⅵ SQL 語句執行感覺很慢,怎麼回事
到這個數量級的全部更新,肯定會很慢。
第一。你的記錄不一定在同一個partition,
第二。不明白為什麼那麼多人建議你建索引,你建的索引越多,你的更新速度越慢,因為你更新記錄的同時,還有更新索引。
第三。你必須知道更新速度慢的瓶頸在哪裡。是讀寫太多,還是內存不夠,還是CUP不夠快,然後對症下葯。
下面介紹兩個簡單的辦法,也許有效:
第一:
把這個100W行的表縱向劈成兩個,用外鍵關系連接,一個裝小的,經常改變的數據比如ID,外鍵,狀態值,時間等,另一個裝大的,不經常改變的數據,比如很長的字元串,xml,text 等。
這樣更新時操作小的這個表,可以大大節約內存和CPU 開銷,降低磁碟操作。
壞處就是查詢時會慢些。
第二:
把這100W行橫向切成很多個表,比如每個月的記錄裝在一個表裡,這樣每個表的記錄數可能只有幾萬,查詢,更新都會快很多。
壞處是查詢,更新都不如原來好寫。
Ⅶ sql server2005資料庫是什麼原因導致網頁打開速度慢
你數據表的數據很多 就會i導致頁面代開的很慢
你可以給頁面做一些優化
頁面全部採用HTML標簽學 杜絕伺服器控制項(伺服器運行時會給頁面增加很多垃圾代碼 會影響訪問的速度)
數據表的數據多的話 可以用存儲過程對表進行分頁查詢 這樣可以加快速度
把查詢出來的數據保存到緩存裡面 想要什麼數據從緩存中讀取
這樣的話 你的頁面訪問速度就會大大提高了
Ⅷ 如何解決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 查詢的優化,添加更合適的索引可以避免性能問題:執行計劃使用索引並不意味著就能執行快。