淺談sqlserver數據庫優化(一)----開光篇


今天暫時無事,風和日麗,萬里無雲。游山的、玩水的、遛麻雀的都閑的不亦樂乎,也忙的不亦樂乎。在這美好的季節,依舊躲在被窩或是電腦旁絞盡腦汁敲鍵盤的人們,也別有一番滋味。廢話少說,言歸正傳。

趕上了一個最難就業季,總有很多不順。前幾天面試,被問了很多mvcsqlserver索引的問題,借這個時候來溫習一下這些知識。

有一個人事數據庫hrmis,里面的用戶表叫A01,共7000條數據。

為了測試需要把這些數據,復制到另外一個測試數據庫里。語句如下:

測試數據庫為:funcunweiTest

use funcunweiTest
select  *  into peoTest  from hrmis..a01

   –-輸出結果(7311行受影響)

注:SELECT INTO INSERT INTO SELECT 兩種表復制語句】

 

索引使用的目的,是在大數據量的情況下提高查詢速度,幾千條數據庫是看不出來很大差別的。為了實現大數據,我們可以不斷的執行下面這個語句(小心硬盤空間不足,):

  insert  into peoTest  select  *  from peoTest

 

--【在耗費了3G的空間后,用count進行統計有將近375萬條數據,可以滿足我們的測試了。】

查詢耗時我用的辦法時,查詢之前先聲明一個時間,查詢之后再聲明一個時間,然后獲得時間差。 

datediff(millisecond, 開始時間, 結束時間)  --millisecond 毫秒

 

 

【測試一】查看peoTest表只查詢一個列耗時情況。

declare  @start  datetime, @end  datetime
set  @start = getdate()
select A0188  from peotest
set  @end = getdate()

select datediff(millisecond,@start,@end

--查詢A0188耗時為:23706毫秒 A0188代表ID

--查詢A019Z列耗時:30960毫秒 A019Z代表地址

 

 

【測試二】查看peoTest表查詢所有列耗時情況

declare  @start  datetime, @end  datetime
set  @start = getdate()
select  *  from peotest
set  @end = getdate()
select  datediff(millisecond, @start, @end)

--查詢所有列耗時為:201350毫秒

 

 

 【測試三】利用分頁存儲過程,查看某一頁單列及所有列耗時情況。

  一個好用的分頁存儲過程

 

declare  @start  datetime, @end  datetime

 set @start=getdate() 

exec selectbypage  ' peoTest ', ' * ', ' A0188 ', 20, 10, 0, 0, '' 

set  @end = getdate() 

select  datediff(millisecond, @start, @end)

  --查詢的所有列第10頁,每頁20條數據,耗時:22346毫秒

--只查詢A0188列第10頁,每頁20條數據,耗時:12176毫秒

 

 

從以上三個測試例子,可以得出以下結論:

 1、盡量少使用  * 號,應只查詢需要的字段,能減少不必要的消耗。 

 2、多使用分頁,單頁數據量較少,也可以提高查詢效率。 先寫到這里,外面這么好的天氣,不去打打球,運動一下身體,真太可惜了。身體是本錢。身體是一切基礎!。

 

現在是在窗戶旁坐着,還是自然風吹的爽啊。

欲知后事如何,且聽下回分解。。。。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM