C:\Program Files\Microsoft SQL Server\MSSQL10_50.BLOGD\MSSQL\FTData
(檔名tsCHT.XML,編碼UNICODE)
USE master
GO
CREATE DATABASE temp_sbcs COLLATE SQL_Latin1_General_CP1_CI_AS
GO
USE temp_sbcs
GO
EXEC sys.sp_fulltext_load_thesaurus_file 1028
GO
USE master
GO
DROP DATABASE temp_sbcs
GO
2011年7月21日 星期四
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
更快
但是用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
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日 星期二
2011年6月28日 星期二
讓網站轉址的方法
1. HTML 的轉址方法:
在 HTML 網頁的 前加入以下 HMTL 碼,網頁就會自動轉址。
< meta equiv="refresh" content="0;url=http://mepopeidia.com" >
其中 content=... 中的 0 是指 0 秒後自動重新整理,並轉址到 "http://mepopeidia.com" 這個 URL。
2. Javascript 的轉址方法:
在 HTML 網頁中原則上是任一地方加入以下 JavaScript 網頁就會轉址。但放在網頁 HTML 碼的開始較有效率(也較有意義)。
<script>document.location.href="http://mepopedia.com";</script >
在 HTML 網頁的 前加入以下 HMTL 碼,網頁就會自動轉址。
< meta equiv="refresh" content="0;url=http://mepopeidia.com" >
其中 content=... 中的 0 是指 0 秒後自動重新整理,並轉址到 "http://mepopeidia.com" 這個 URL。
2. Javascript 的轉址方法:
在 HTML 網頁中原則上是任一地方加入以下 JavaScript 網頁就會轉址。但放在網頁 HTML 碼的開始較有效率(也較有意義)。
<script>document.location.href="http://mepopedia.com";</script >
2011年6月27日 星期一
讓SQL幫你找尋需要重建的索引
SELECT 'ALTER INDEX [' + ix.name + '] ON [' + s.name + '].[' + t.name + '] ' +
CASE
WHEN ps.avg_fragmentation_in_percent > 15
THEN 'REBUILD'
ELSE 'REORGANIZE'
END +
CASE
WHEN pc.partition_count > 1
THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX))
ELSE ''
END,
avg_fragmentation_in_percent
FROM sys.indexes AS ix
INNER JOIN sys.tables t
ON t.object_id = ix.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
INNER JOIN
(SELECT object_id ,
index_id ,
avg_fragmentation_in_percent,
partition_number
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)
) ps
ON t.object_id = ps.object_id
AND ix.index_id = ps.index_id
INNER JOIN
(SELECT object_id,
index_id ,
COUNT(DISTINCT partition_number) AS partition_count
FROM sys.partitions
GROUP BY object_id,
index_id
) pc
ON t.object_id = pc.object_id
AND ix.index_id = pc.index_id
WHERE ps.avg_fragmentation_in_percent > 10
AND ix.name IS NOT NULL
CASE
WHEN ps.avg_fragmentation_in_percent > 15
THEN 'REBUILD'
ELSE 'REORGANIZE'
END +
CASE
WHEN pc.partition_count > 1
THEN ' PARTITION = ' + CAST(ps.partition_number AS nvarchar(MAX))
ELSE ''
END,
avg_fragmentation_in_percent
FROM sys.indexes AS ix
INNER JOIN sys.tables t
ON t.object_id = ix.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
INNER JOIN
(SELECT object_id ,
index_id ,
avg_fragmentation_in_percent,
partition_number
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL)
) ps
ON t.object_id = ps.object_id
AND ix.index_id = ps.index_id
INNER JOIN
(SELECT object_id,
index_id ,
COUNT(DISTINCT partition_number) AS partition_count
FROM sys.partitions
GROUP BY object_id,
index_id
) pc
ON t.object_id = pc.object_id
AND ix.index_id = pc.index_id
WHERE ps.avg_fragmentation_in_percent > 10
AND ix.name IS NOT NULL
訂閱:
文章 (Atom)