2011年7月21日 星期四

不使用SELECT COUNT(*) 取得Table的總和

EXEC sp_spaceused '資料庫名稱'

SQL語法效能提升

一般來說大家都會推薦利用join
但是用join 有一個條件要特別注意就是其中一個table資料筆數應該盡量少
例如 select a inner join b on a.date=b.date and a.Country=b.Counrty and a.City=b.City and a.Product=b.Product

a---10000000筆資料
b---1000筆資料
這樣會比
select * from a where ....快
但是如果b有三四萬筆的資料時,而其中date, Counrty在一萬筆中多半為一致的情形下
此時就應該減少b跟a join 的條件,而是在最後JOIN出來的結果處再下where 處理
這樣效能會好很多
修改後變成
select * from a inner join b on a.City=b.City and a.Product=b.Product where a.Date='991201' and a.Country='Taiwan'
這樣會比
select * from a inner join b on a.City=b.City and a.Product=b.Product and a.date=b.date and a.Counrty=b.Counrty
更快

2011年7月17日 星期日

查SQL最耗費CPU以及時間的語法

先清除暫存
dbcc freeProcCache

再下SQL
SELECT TOP 10
total_worker_time/1000000 AS [总消耗CPU 时间(s)],execution_count [运行次数],
qs.total_worker_time/qs.execution_count/1000000. as [平均消耗CPU 时间(s)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(case when qs.statement_end_offset = -1
then DATALENGTH(qt.text)
else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)
as [使用CPU的语法], qt.text [完整语法],
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName

FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY
total_worker_time DESC

2011年7月12日 星期二

利用Google Desktop去做索引

http://www.codeproject.com/KB/cs/GoogleDesktopCmdSearch.aspx

流程是先把要搜尋的欄位存成一個文字檔(檔名就可以用ID的欄位),每一行資料存一個檔案

然後使用Google Desktop去對此資料夾做索引,之後就使用GOOGLE的元件去做搜尋,然後搜尋回來的檔名就可以進入資料庫撈你想要的資料。