首先應該確定是誰慢的,往往是程序處理方面的問題而不是數(shù)據(jù)庫的問題。
創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都做網(wǎng)站、成都網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的華寧網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
程序方面應該盡可能的減少數(shù)據(jù)查詢返回的內(nèi)容,減少IO壓力,磁盤IO和網(wǎng)絡IO是非常非常慢的。比如可以查詢返回ID,然后再根據(jù)ID一條一條的查詢具體內(nèi)容,看似慢了,在數(shù)據(jù)量大的時候快很多
對于數(shù)據(jù)可以參照下面幾點
1、優(yōu)化SQL語句,SQL語句對查詢速度影響最大的
2、對于經(jīng)常查詢的字段作索引。但是這樣會增加修改時的壓力
4、優(yōu)化SQLServer,比如給其分配固定的內(nèi)存,預先分配查詢內(nèi)存,調(diào)整CPU使用率等。SQL Server 可以占用幾乎所有Windows的內(nèi)存,但是申請內(nèi)存開銷很大。因此可以設定其使用固定大小內(nèi)存,比如啟動就分配1G以上內(nèi)存。
5、優(yōu)化硬件資源,比如使用更高的服務器或者硬盤,獨立安排數(shù)據(jù)庫的數(shù)據(jù)文件和索引文件,將數(shù)據(jù)文件分布于不同的物理硬盤上等等
6、考慮使用分布數(shù)據(jù)庫或者對大表進行拆分
慢的三個原因,IOPS,CPU,內(nèi)存,鎖。
數(shù)據(jù)庫默認是占滿內(nèi)存做緩存的,如果你有2個不同的數(shù)據(jù)庫,內(nèi)存不分配好,就出現(xiàn)爭用內(nèi)存的情況。
CPU一般建議80%左右,索引、大邏輯查詢,count等統(tǒng)計信息都是走CPU,CPU高肯定慢。
IOPS,就是寫入速度,如果經(jīng)常批量寫數(shù)據(jù),批量查數(shù)據(jù),或者直接全部數(shù)據(jù)讀取后給前端處理,IOPS不足就會影響數(shù)據(jù)吞吐形成等待。
鎖,也就是事務,大量事務會出現(xiàn)槍鎖情況,這個情況也會等待,甚至死鎖。
做兩手準備,把東西備份,指不定那天系統(tǒng)崩了,你找都找不回來的,系統(tǒng)崩掉是毀硬件的。 小心把。具體的解決辦法,我也沒有。。當然.最好的就是換一個機器.不過2000就可以攢一個好的,硬盤可以使用原來的.一般這種情況與機器配置有關.
數(shù)據(jù)庫的結構很重要,表的建立,對需要用到的字段進行建立索引:盡量單表查詢。
CREATE INDEX index_name ON table_name (column_name);
多字段查詢,建立索引:
CREATE INDEX index_name ON table_name (column_name1,column_name2);
唯一索引:
CREATE UNIQUE INDEX index_name ON table_name (column_name);
你在服務器上直接查詢,只是讀取一次數(shù)據(jù)到內(nèi)存中。
你現(xiàn)在的代碼,首先要從數(shù)據(jù)庫讀出,然后要寫入df,df可以看做一個內(nèi)存數(shù)據(jù)庫,寫入需要做一些相關的處理,例如索引之類的。
然后又要從df讀出,再寫入excel,這個步驟是寫入磁盤,也是花費時間最多的。
沒有用到索引或者就是內(nèi)存小了,因為沒有備份運行時有的sql丟失了。
看看數(shù)據(jù)庫內(nèi)存設置是否比較小,數(shù)據(jù)庫表是否建立合理的索引。
因為主機長期在工作.數(shù)據(jù)會一上在增多..對于內(nèi)存還有CPU來說不是所有數(shù)據(jù)都可以一次性的完全處理好。就會有一些"尾數(shù)"包括記錄,然而越來越多,會讓主機運行速度變慢。如果用好點的專用的服務器硬盤,內(nèi)存會讓主機更長時間的不用重啟。所以SQL還是要用高一點的配置。