測試sql語句
Ⅰ sql測試:查詢語句
因為SQL中的記錄是沒有記錄號的概念,也就是沒有先後次序的概念,所以要取其中20~40條記錄是沒有好的辦法的。
如果確實有這種需求,那麼在做系統設計時就要注意,然後把它轉化為別的需求,再不就是自行增加一個類似記錄號的欄位,來滿足需求。
對於已有的數據,卻沒有類似記錄號的欄位,實現起來可就真是麻煩了!
並且SQL無法實現這種帶變數的查詢語句:Select top @num * from [tablename],會報錯的!
有一個實現方法是:將數據放到一個臨時表中,臨時表比實際表多一個整型定做,再用循環給所有記錄編上序號放在這個整型欄位中,最後查詢這個欄位在一定范圍的值。
如下是寫入序號的關鍵語句(不建議用游標,太耗資源),假設表的主鍵欄位名叫[item],臨時表的序號存放在欄位[ID]中,要求查詢的最小與最大序號為@min和@max(在存儲過程中由參數傳入)
declare @i int, @key int, @max int, @min int
select *, 0 as [id] into [#tablename] from [tablename]
set @i=1
while 1=1 begin
set @key=(select top 1 [item] from [#tablename] where [id]=0 order by item)
if @key is null break
else begin
update [#tablename] set [id]=@i where [item]=@key
set @i=@i+1
end
end
--最後的查詢語句:
select * from [#tablename] where [id] between @min and @max order by [item]
Ⅱ windows下在mysql中如何測試一條sql語句的性能、執行時間等信息。
在響應的腳本首行加上:
$start_t=microtime(true);
在頁面最後加上:
$end_t=microtime(true);
$totaltime=$end_t-$start_t;
echo " 執行時間:".$totaltime." 秒";
自然會給出執行時間了。
Ⅲ PL/SQl怎麼測試一個sql語句的性能
一段SQL代碼寫好以後,可以通過查看SQL的執行計劃,初步預測該SQL在運行時的性能好壞,尤其是在發現某個SQL語句的效率較差時,我們可以通過查看執行計劃,分析出該SQL代碼的問題所在。
1、 打開熟悉的查看工具:PL/SQL Developer。
在PL/SQL Developer中寫好一段SQL代碼後,按F5,PL/SQL Developer會自動打開執行計劃窗口,顯示該SQL的執行計劃。
2、 查看總COST,獲得資源耗費的總體印象
一般而言,執行計劃第一行所對應的COST(即成本耗費)值,反應了運行這段SQL的總體估計成本,單看這個總成本沒有實際意義,但可以拿它與相同邏輯不同執行計劃的SQL的總體COST進行比較,通常COST低的執行計劃要好一些。
3、 按照從左至右,從上至下的方法,了解執行計劃的執行步驟
執行計劃按照層次逐步縮進,從左至右看,縮進最多的那一步,最先執行,如果縮進量相同,則按照從上而下的方法判斷執行順序,可粗略認為上面的步驟優先執行。每一個執行步驟都有對應的COST,可從單步COST的高低,以及單步的估計結果集(對應ROWS/基數),來分析表的訪問方式,連接順序以及連接方式是否合理。
4、 分析表的訪問方式
表的訪問方式主要是兩種:全表掃描(TABLE ACCESS FULL)和索引掃描(INDEX SCAN),如果表上存在選擇性很好的索引,卻走了全表掃描,而且是大表的全表掃描,就說明表的訪問方式可能存在問題;若大表上沒有合適的索引而走了全表掃描,就需要分析能否建立索引,或者是否能選擇更合適的表連接方式和連接順序以提高效率。
5、 分析表的連接方式和連接順序
表的連接順序:就是以哪張表作為驅動表來連接其他表的先後訪問順序。
表的連接方式:簡單來講,就是兩個表獲得滿足條件的數據時的連接過程。主要有三種表連接方式,嵌套循環(NESTED LOOPS)、哈希連接(HASH JOIN)和排序-合並連接(SORT MERGE JOIN)。我們常見得是嵌套循環和哈希連接。
嵌套循環:最適用也是最簡單的連接方式。類似於用兩層循環處理兩個游標,外層游標稱作驅動表,Oracle檢索驅動表的數據,一條一條的代入內層游標,查找滿足WHERE條件的所有數據,因此內層游標表中可用索引的選擇性越好,嵌套循環連接的性能就越高。
哈希連接:先將驅動表的數據按照條件欄位以散列的方式放入內存,然後在內存中匹配滿足條件的行。哈希連接需要有合適的內存,而且必須在CBO優化模式下,連接兩表的WHERE條件有等號的情況下才可以使用。哈希連接在表的數據量較大,表中沒有合適的索引可用時比嵌套循環的效率要高。
Ⅳ 正則表達式 判斷檢測sql語句
publicstaticRegexrxColumns=newRegex(@"A(withs+(?:(?!as).)+s+as)?s*SELECTs+((?:((?>((?<depth>)|)(?<-depth>)|.?)*(?(depth)(?!)))|.)*?)(?<!,s+)FROM",RegexOptions.IgnoreCase|RegexOptions.Multiline|RegexOptions.Singleline|RegexOptions.Compiled);