SQLServer之創建全文索引

来源:https://www.cnblogs.com/vuenote/archive/2018/09/25/9700059.html
-Advertisement-
Play Games

創建全文索引的必須條件 必須具有全文目錄,然後才能創建全文索引。 目錄是包含一個或多個全文索引的虛擬容器。 使用SSMS資料庫管理工具創建全文索引 1、連接資料庫,選擇資料庫,選擇數據表-》右鍵數據表-》選擇全文索引-》選擇定義全文索引。 2、在全文索引嚮導點擊下一步。 3、在全文索引嚮導彈出框-》 ...


創建全文索引的必須條件

必須具有全文目錄,然後才能創建全文索引。 目錄是包含一個或多個全文索引的虛擬容器。

使用SSMS資料庫管理工具創建全文索引

1、連接資料庫,選擇資料庫,選擇數據表-》右鍵數據表-》選擇全文索引-》選擇定義全文索引。

2、在全文索引嚮導點擊下一步。

3、在全文索引嚮導彈出框-》選擇一個最小唯一索引-》點擊下一步。

4、在全文索引嚮導彈出框-》選擇全文檢索數據列-》點擊下一步。

5、在全文索引嚮導彈出框-》選擇表或者視圖修改全文索引修改方式-》點擊下一步。

6、在全文索引嚮導彈出框-》可以選擇已有的全文索引目錄或者自定義全文索引目錄-》點擊下一步。

7、在全文索引嚮導彈出框-》選擇填充計劃,可以自定義填充計劃-》點擊下一步。

 8、在全文索引嚮導彈出框-》點擊完成。

使用T-SQL腳本創建全文索引

語法:

--聲明資料庫引用
use 資料庫名;
go

--查看全文索引是否存在,如果存在則刪除
if exists(select * from sys.fulltext_indexes)
drop fulltext index on 表名;
go

create
fulltext --創建全文索引
index
on 表名--包含全文索引中的一列或多列的表或索引視圖的名稱。
(
name1  --全文索引中包含的列的名稱。 只能為 char、varchar、nchar、nvarchar、text、ntext、image、xml 或 varbinary 類型的列編製索引,以供全文搜索使用。
--[LANGUAGE language_term] --存儲在 column_name 中的數據的語言。
--statistical_semantics, --創建作為統計語義索引一部分的附加關鍵短語和文檔相似性索引。

name2 
--[LANGUAGE language_term] 
--statistical_semantics, 

......
)
key index 唯一索引名稱--table_name 的唯一鍵索引的名稱。 KEY INDEX 必須是唯一的單鍵列,不可為 Null。 為全文唯一鍵選擇最小的唯一鍵索引。 為獲得最佳性能,建議全文鍵使用整數數據類型。
on 全文目錄--用於全文索引的全文目錄。 資料庫中必須已存在該目錄。 此子句為可選項。 如果未指定,則使用預設目錄。 如果預設目錄不存在, SQL Server 將返回錯誤。
with(
--CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
--指定是否由 SQL Server 將對全文索引所覆蓋的表列所做的更改(更新、刪除或插入)傳播到全文索引。 通過 WRITETEXT 和 UPDATETEXT 所做的數據更改不會反映到全文索引中,也不能使用更改跟蹤方法拾取。
--MANUAL
--指定必須通過調用 ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 語句(手動填充)。 您可以使用 SQL Server 代理來定期調用此 Transact-SQL 語句。
--AUTO
--指定當基表中的數據修改時,所跟蹤的更改將會自動傳播(自動填充)。 儘管是自動傳播更改,但這些更改可能不會立即反映到全文索引中。 預設值為 AUTO。
--OFF [ , NO POPULATION]
--指定 SQL Server 不保留對索引數據的更改的列表。 如果未指定 NO POPULATION,則 SQL Server 創建索引後將對其進行完全填充。
--僅當 CHANGE_TRACKING 為 OFF 時,才能使用 NO POPULATION 選項。 如果指定了 NO POPULATION,則 SQL Server 在創建索引後不會對其進行填充。 僅當用戶使用 START FULL POPULATION 或 START INCREMENTAL POPULATION 子句執行 ALTER FULLTEXT INDEX 命令之後,才會填充索引。
change_tracking={ MANUAL | AUTO | OFF [ , NO POPULATION ] },

--STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
--將全文非索引字表與索引關聯起來。 不使用屬於指定非索引字表的任何標記填充索引。 如果未指定 STOPLIST,則 SQL Server 會將系統全文非索引字表與索引關聯起來。
--OFF
--指定沒有與全文索引關聯的非索引字表。
--SYSTEM
--指定應對此全文索引使用預設的全文系統 STOPLIST。
--stoplist_name
--指定要與全文索引關聯的非索引字表的名稱。
stoplist= { OFF | SYSTEM | stoplist_name },

--SEARCH PROPERTY LIST [ = ] property_list_name
--適用範圍: SQL Server 2012 (11.x) 到 SQL Server 2017。
--將搜索屬性列表與索引相關聯。
--OFF
--指定不會將任何屬性列表與全文索引相關聯。
--property_list_name
--指定要與全文索引關聯的搜索屬性列表的名稱。
search property list={ off | property_list_name },
)
go

示例:

--聲明資料庫引用
use testss;
go

--查看全文索引是否存在,如果存在則刪除
if exists(select * from sys.fulltext_indexes)
drop fulltext index on test1;
go

create
fulltext --創建全文索引
index
--firstfulltextindex
on test1 --包含全文索引中的一列或多列的表或索引視圖的名稱。
(
name --全文索引中包含的列的名稱。 只能為 char、varchar、nchar、nvarchar、text、ntext、image、xml 或 varbinary 類型的列編製索引,以供全文搜索使用。
--[LANGUAGE language_term] --存儲在 column_name 中的數據的語言。
--statistical_semantics --創建作為統計語義索引一部分的附加關鍵短語和文檔相似性索引。
)
key index PK__test1__3213E83F466EE881 --table_name 的唯一鍵索引的名稱。 KEY INDEX 必須是唯一的單鍵列,不可為 Null。 為全文唯一鍵選擇最小的唯一鍵索引。 為獲得最佳性能,建議全文鍵使用整數數據類型。
on FirstFullText --用於全文索引的全文目錄。 資料庫中必須已存在該目錄。 此子句為可選項。 如果未指定,則使用預設目錄。 如果預設目錄不存在, SQL Server 將返回錯誤。
with(
--CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
--指定是否由 SQL Server 將對全文索引所覆蓋的表列所做的更改(更新、刪除或插入)傳播到全文索引。 通過 WRITETEXT 和 UPDATETEXT 所做的數據更改不會反映到全文索引中,也不能使用更改跟蹤方法拾取。
--MANUAL
--指定必須通過調用 ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 語句(手動填充)。 您可以使用 SQL Server 代理來定期調用此 Transact-SQL 語句。
--AUTO
--指定當基表中的數據修改時,所跟蹤的更改將會自動傳播(自動填充)。 儘管是自動傳播更改,但這些更改可能不會立即反映到全文索引中。 預設值為 AUTO。
--OFF [ , NO POPULATION]
--指定 SQL Server 不保留對索引數據的更改的列表。 如果未指定 NO POPULATION,則 SQL Server 創建索引後將對其進行完全填充。
--僅當 CHANGE_TRACKING 為 OFF 時,才能使用 NO POPULATION 選項。 如果指定了 NO POPULATION,則 SQL Server 在創建索引後不會對其進行填充。 僅當用戶使用 START FULL POPULATION 或 START INCREMENTAL POPULATION 子句執行 ALTER FULLTEXT INDEX 命令之後,才會填充索引。
change_tracking=auto,

--STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
--將全文非索引字表與索引關聯起來。 不使用屬於指定非索引字表的任何標記填充索引。 如果未指定 STOPLIST,則 SQL Server 會將系統全文非索引字表與索引關聯起來。
--OFF
--指定沒有與全文索引關聯的非索引字表。
--SYSTEM
--指定應對此全文索引使用預設的全文系統 STOPLIST。
--stoplist_name
--指定要與全文索引關聯的非索引字表的名稱。
stoplist=system,

--SEARCH PROPERTY LIST [ = ] property_list_name
--適用範圍: SQL Server 2012 (11.x) 到 SQL Server 2017。
--將搜索屬性列表與索引相關聯。
--OFF
--指定不會將任何屬性列表與全文索引相關聯。
--property_list_name
--指定要與全文索引關聯的搜索屬性列表的名稱。
search property list=off
)
go

創建全文索引優缺點

優點:

1、全文索引可對char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 類型欄位進行檢索,是解決海量數據模糊查詢的好辦法。

2、一個表只能建立一個全文索引(但可以對多個欄位)。

3、與全文搜索不同,LIKE Transact-SQL 謂詞僅對字元模式( char、varchar、nchar、nvarchar)有效。另外,不能使用 LIKE 謂詞來查詢格式化的二進位數據。此外,對大量非結構化的文本數據執行 LIKE 查詢要比對相同數據執行同樣的全文查詢慢得多。對數百萬行文本數據進行的 LIKE 查詢可能需要幾分鐘的時間才能返回結果;而對於同樣的數據,全文查詢只需要幾秒甚至更少的時間,具體取決於返回的行數及其大小。另一個考慮因素是 LIKE 僅對整個表執行簡單模式掃描。相反,全文查詢可識別語言,它在索引和查詢時應用特定的轉換,例如,篩選非索引字併進行同義詞庫和變形擴展。這些轉換可幫助全文查詢改進其撤回以及結果的最終排名

缺點:

 1、全文索引導致磁碟資源的大量占用,全文索引本身就是一個利用磁碟空間換取性能的方法。全文索引大的原因是,按照某種語言來進行分詞。

 2、更新欄位值,全文索引的索引不會自動更新,索引定期維護,以及表本身的維護操作使得這個表的管理成本大大的增加。

 3、使用全文索引並不是對應用透明的。如果要想利用全文索引,必須修改查詢語句。原有的查詢語句是不可能利用全文索引的,需要改成全文索引規定的語法。全文索引不會影響到其他的SQL語句。

 4、全文索引自身還有些缺陷。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.NosqL 非關係型資料庫,裡面包含Redis和MondoDB2.為什麼會用到關係型資料庫?因為當數據量太多,訪問人數過多的時候,在訪問關係型資料庫時會到硬碟里進行讀寫過多 這樣就會導致訪問速度很慢,伺服器壓力很大。3.這個時候,我們就可以使用非關係型資料庫,它相當於一個緩存區, 把一些經常用的 ...
  • 前幾天在看 2018 雲棲大會,來自中科院計算所的陳世敏研究員在“資料庫內核專場”做了一場《NVM在資料庫領域的研究和探索 》的報告演講。在30分鐘的演講中,其中有近10頁PPT的內容和B+Tree這種索引有關。 例如其中的兩頁 為此,將自己對索引相關的理解梳理如下: 1.什麼是索引? 索引是磁碟上 ...
  • 很久沒來更新博客,自感是一個只會搬磚的勞工,總搞些MySQL相關的資料庫實在無聊,且時不時遇到些不講道理的Dev吧,真的是心累至極,有種想回頭我也去乾開發的衝動,當個需求者有話語權要風得風,要雨得雨多帥。以上純屬個人小目標,萬一哪天實現了呢,豈不美滋滋,從此走上人生巔峰,頓覺做技術不再那麼枯燥了。 ...
  • 詳解Oracle客戶端,PL/SQL工具下載: 下載地址:http://www.oraclejsq.com/getOracle_jcjc.do?nodeid=010100114 ...
  • 簡介 大數據平臺通過將所有數據整合起來,充分分析與挖掘數據的內在價值,為業務部門提供數據平臺,數據產品與數據服務。大數據平臺接入的數據中可能包括很多用戶的隱私和敏感信息,如用戶在酒店的入住紀錄,用戶支付信息等,這些數據存在可能泄漏的風險。大數據平臺一般通過用戶認證,許可權管理以及數據加密等技術保證數據 ...
  • 最近一直在瞎搬磚,最大的感觸是運維工作難做。不過廢話不多說,最近被分配了一項比較有意思的task,嘗試著非root用戶搭建MHA並測試下能否成功漂移,以下是兩天測試和文檔編寫的成果,分享給各位看客,歡迎交流學習。 測試的目的: 現行的主流搭建MHA使用的用戶是root來傳遞公鑰以及進行一些切換、摘除 ...
  • 當今,世界無時無刻不在發生著變化。對於技術領域而言,普遍存在的一個巨大變化就是為大數據(Big data)打開了大門,並應用大數據技相關技術來改善各行業的業務並促進經濟的發展。目前,大數據的作用已經上升到一定程度,對於小型或大型公司而言,從所收集的數據中提取出有用的信息已被是非常寶貴的。此外,大數據 ...
  • 創建表 Create table <tabname> ( 修改表列(長度、類型)(修改之後最好reorg一下表) ALTER TABLE <tabname> ALTER COLUMN <colname> SET DATA TYPE <數據類型>; --(和sqlserver有區別,沒有DATA TY ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...