SQL 建立全文檢索 優化全文檢索 fullText index
工作上需要做到全文檢索
當初想說用LIKE 就可以處理,當然,在做小型的搜尋(這邊講的小型並非是數量少,而是欄位大小小)的時候,發現用LIKE沒有太大的問題
但是當我在做一個內文檢索的時候(大小可能為NVARCHAR(2000))時間就被拉到快六秒
搜尋內文中有 媽 這個字的搜尋
因此這時候就會用到View
建立一個View後發現不能建立index
下列內容有說 好像是因為view的來源Table沒有建立index
不過我自己查看是有primary key 的 index 所以我也不懂什麼意思
推測可能是因為不是使用基底資料庫
參考:https://m.blueshop.com.tw/Thread.aspx?tbfumsubcde=BRD20041020105213V68接著發現不能建立之後查找一下是因為 WITH SCHEMABINDING 基底資料庫
這條會讓你可以建立叢集式Index 就可以用於全文檢索了
並且這條建議是用在變動資料結構頻率少的資料庫
因為一但變動資料表 就會喪失索引
並且不能用Query下修改
--Info Brief
CREATE VIEW dbo.ViewInfo
WITH SCHEMABINDING
AS
SELECT ID AS ID , Type AS Type ,Title AS Title , Brief AS Brief
FROM dbo.TestInfo
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_ViewInfo
ON dbo.ViewInfo(ID);
GO
這邊有一個需要注意的點是在於
CREATE VIEW 這個關鍵字只能當code的第一段開始
而當GO關鍵字使用之後 就算是新的一個Query
因此 假如上述有任何東西 要以下列方式進行
..... content
GO
--Info Brief
CREATE VIEW dbo.ViewInfo
WITH SCHEMABINDING
AS
SELECT ID AS ID , Type AS Type ,Title AS Title , Brief AS Brief
FROM dbo.TestInfo
GO
--Create an index on the view.
CREATE UNIQUE CLUSTERED INDEX IDX_ViewInfo
ON dbo.ViewInfo(ID);
GO
並且View中不能有SubQuery 也就是 SELECT * FROM (SELECT * FROM Table) 不能使用
接著在這篇文章中有詳細解釋關於View 相關事情
既然已經建立好View 跟 全文檢索了 那就可以搜尋了
SET @str = '"*' + @getstr +'*"'
SELECT *
FROM [dbo].[View]
WHERE CONTAINS(Title , @str)
參考
https://learn.microsoft.com/zh-tw/sql/t-sql/statements/create-fulltext-index-transact-sql?redirectedfrom=MSDN&view=sql-server-ver16
http://vito-note.blogspot.com/2013/06/blog-post_801.html
https://m.blueshop.com.tw/Thread.aspx?tbfumsubcde=BRD20041020105213V68
https://social.msdn.microsoft.com/Forums/silverlight/zh-TW/a26ed655-0386-4f3f-a8e8-10cd0e99d682/3553121839-view-2291420309243143203424341?forum=240
http://vito-note.blogspot.com/2013/05/views.html
https://www.fooish.com/sql/view.html
https://dotblogs.com.tw/rockchang/2016/04/26/100926
https://dotblogs.com.tw/ricochen/2009/10/04/10907



留言
張貼留言