首先應(yīng)該確定是誰(shuí)慢的,往往是程序處理方面的問題而不是數(shù)據(jù)庫(kù)的問題。
創(chuàng)新互聯(lián)主營(yíng)秀洲網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),秀洲h5重慶小程序開發(fā)搭建,秀洲網(wǎng)站營(yíng)銷推廣歡迎秀洲等地區(qū)企業(yè)咨詢
程序方面應(yīng)該盡可能的減少數(shù)據(jù)查詢返回的內(nèi)容,減少IO壓力,磁盤IO和網(wǎng)絡(luò)IO是非常非常慢的。比如可以查詢返回ID,然后再根據(jù)ID一條一條的查詢具體內(nèi)容,看似慢了,在數(shù)據(jù)量大的時(shí)候快很多
對(duì)于數(shù)據(jù)可以參照下面幾點(diǎn)
1、優(yōu)化SQL語(yǔ)句,SQL語(yǔ)句對(duì)查詢速度影響最大的
2、對(duì)于經(jīng)常查詢的字段作索引。但是這樣會(huì)增加修改時(shí)的壓力
4、優(yōu)化SQLServer,比如給其分配固定的內(nèi)存,預(yù)先分配查詢內(nèi)存,調(diào)整CPU使用率等。SQL Server 可以占用幾乎所有Windows的內(nèi)存,但是申請(qǐng)內(nèi)存開銷很大。因此可以設(shè)定其使用固定大小內(nèi)存,比如啟動(dòng)就分配1G以上內(nèi)存。
5、優(yōu)化硬件資源,比如使用更高的服務(wù)器或者硬盤,獨(dú)立安排數(shù)據(jù)庫(kù)的數(shù)據(jù)文件和索引文件,將數(shù)據(jù)文件分布于不同的物理硬盤上等等
6、考慮使用分布數(shù)據(jù)庫(kù)或者對(duì)大表進(jìn)行拆分
慢的三個(gè)原因,IOPS,CPU,內(nèi)存,鎖。
數(shù)據(jù)庫(kù)默認(rèn)是占滿內(nèi)存做緩存的,如果你有2個(gè)不同的數(shù)據(jù)庫(kù),內(nèi)存不分配好,就出現(xiàn)爭(zhēng)用內(nèi)存的情況。
CPU一般建議80%左右,索引、大邏輯查詢,count等統(tǒng)計(jì)信息都是走CPU,CPU高肯定慢。
IOPS,就是寫入速度,如果經(jīng)常批量寫數(shù)據(jù),批量查數(shù)據(jù),或者直接全部數(shù)據(jù)讀取后給前端處理,IOPS不足就會(huì)影響數(shù)據(jù)吞吐形成等待。
鎖,也就是事務(wù),大量事務(wù)會(huì)出現(xiàn)槍鎖情況,這個(gè)情況也會(huì)等待,甚至死鎖。
沒有用到索引或者就是內(nèi)存小了,因?yàn)闆]有備份運(yùn)行時(shí)有的sql丟失了。
看看數(shù)據(jù)庫(kù)內(nèi)存設(shè)置是否比較小,數(shù)據(jù)庫(kù)表是否建立合理的索引。
因?yàn)橹鳈C(jī)長(zhǎng)期在工作.數(shù)據(jù)會(huì)一上在增多..對(duì)于內(nèi)存還有CPU來(lái)說(shuō)不是所有數(shù)據(jù)都可以一次性的完全處理好。就會(huì)有一些"尾數(shù)"包括記錄,然而越來(lái)越多,會(huì)讓主機(jī)運(yùn)行速度變慢。如果用好點(diǎn)的專用的服務(wù)器硬盤,內(nèi)存會(huì)讓主機(jī)更長(zhǎng)時(shí)間的不用重啟。所以SQL還是要用高一點(diǎn)的配置。
可以換個(gè)方式重寫這些代碼。這樣循環(huán)相信你也快不到哪去。
另外,把你的SQL語(yǔ)句response出來(lái),放到分析器執(zhí)行一下,看一下時(shí)間。
If Rs.Eof and Rs.Bof Then
Do While Not Rs.EOF這個(gè)也不用了,不是和前面判斷重復(fù)了。
對(duì)sqlserver的影響應(yīng)該不是很大,可能對(duì)access影響就比較大了,而access又沒有什么存儲(chǔ)過(guò)程方面的分頁(yè),建議使用asp.net中的DateSet分頁(yè),速度雖然不是很快,但不至于對(duì)access或sqlserver分別太大。
public static System.Data.DataTable GetPage(string SqlString, int PageIndex, int PageSize)
{
int FirstPage = PageIndex * PageSize;//當(dāng)前的開始位置,其它PageIndex是當(dāng)前頁(yè),PageSize是頁(yè)面大小
SqlConnection conn = new SqlConnection("連接字符串");
SqlCommand cmd = new SqlCommand(SqlString, conn);
SqlDataAdapter oda = new SqlDataAdapter(cmd);
System.Data.DataSet ds = new System.Data.DataSet();
try
oda.Fill(ds, FirstPage, PageSize, "表名");
}
catch { }
finally
{
Close();
}
return ds;
}
通過(guò)這個(gè)分頁(yè),你看看,是不是access與sqlserver速度相差不大呢!
SQL Server has encountered 233 occurrence(s) of I/O
requests taking longer than 15 seconds to complete on file
[S:\Data\dbE2EComb2_Data_redirect.MDF] in database [dbE2EComb2] (5).
The OS file handle is 0x0000089C. The offset of the latest long I/O is:
0x00000a40680000
SQL Server has encountered 501 occurrence(s) of I/O
requests taking longer than 15 seconds to complete on file
[S:\Data\dbE2EComb2_Data_redirect.MDF] in database [dbE2EComb2] (5).
The OS file handle is 0x0000089C. The offset of the latest long I/O is:
0x00000bfe9ac000
SQL Server has encountered 752 occurrence(s) of I/O
requests taking longer than 15 seconds to complete on file
[S:\Data\dbE2EComb2_Data_redirect.MDF] in database [dbE2EComb2] (5).
The OS file handle is 0x0000089C. The offset of the latest long I/O is:
0x00001c7ee40000