1. 程式人生 > >SQL Server 使用全文索引進行頁面搜尋

SQL Server 使用全文索引進行頁面搜尋

建立全文索引

啟動服務

 在SQL Server配置管理工具中,找到'SQL Full-text Filter Daemon Launcher'服務用本地使用者啟動。

建立全文目錄

 開啟需要建立全文目錄的資料庫-儲存-全文目錄-右鍵新建全文目錄

用語句建立全文目錄 

CREATE FULLTEXT CATALOG [FD_HouseSearch]WITH ACCENT_SENSITIVITY = ON
AS DEFAULT
AUTHORIZATION [dbo]

建立全文索引

 右鍵需要建立全文索引的表-全文索引-定義全文索引

1.全文索引必須要有一個唯一非空索引,這裡選擇主鍵。

2.選擇需要全文搜尋的列,並且選擇斷字元語言,因為該欄位主要用來儲存中文,所以這裡也選擇了簡體中文。

斷字元:斷字元用來對全文搜尋資料進行語言分析,查詢單詞的邊界,也就是怎樣將一段很長的內容拆分成日常的詞語或字。例如“全文搜尋”,可能會斷字成“全文”、‘搜尋’、‘全’、‘文’、‘搜’、‘索’等符合中國人正常的習慣的詞或字。

3.選擇跟蹤方式,這裡選擇自動跟蹤,就是表發生更改時自動填充索引。

4.選擇全文目錄、索引檔案、非索引字表

非索引字表:在剛才的斷字中講了怎樣斷字,這裡就是將斷的字儲存在一張表中,該處選擇系統預設的非索引字表.

----查詢斷字表
SELECT
TOP 1000 * FROM sys.dm_fts_index_keywords(db_id(''), object_id(''))

5.填充計劃

可以新建填充計劃來填充全文索引,填充計劃可以是完全填充、增量填充、更新填充。

用語句建立全文索引

--語句少了很多預設引數,其它就按系統預設即可
CREATE
FULLTEXT INDEX ON dbo.Housetest (Description ) KEY INDEX PK_Housetest ON FD_HouseSearch

全文謂詞

全文查詢使用全文謂詞(CONTAINS 和 FREETEXT)以及全文函式(CONTAINSTABLE 和 FREETEXTTABLE)。它們支援複雜的 Transact-SQL 語法,這種語法支援各種形式的查詢詞。若要編寫全文查詢,必須瞭解何時以及如何使用這些謂詞和函式。

CONTAINS 謂詞可以搜尋:

    • 詞或短語。
    • 詞或短語的字首。
    • 與另一個詞相鄰的詞。
    • 由另一個詞的詞形變化而生成的詞(例如,drive 一詞是 drives、drove、driving 和 driven 詞形變化的詞幹)。
    • 使用同義詞庫確定的另一個詞的同義詞(例如,metal 一詞可能有 aluminum 和 steel 等同義詞)。
---下面的示例將查詢包含 "Mountain"
USE
AdventureWorks2008R2; GO SELECT Name, ListPrice FROM Production.Product WHERE CONTAINS(Name, 'Mountain'); GO

--下面的示例將查詢包含 "Mountain"或 "Road"
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')
GO
---下面的示例返回的所有產品名稱中,其 Name 列中至少有一個詞以前輟 chain 開頭
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO

FREETEXT謂詞的用法這裡就不做解釋了!

需求

 現在來說一下我最近的需求,表資料100萬條,資料這裡就不弄出來了,只把方案說一下,title類似於文章的標題,Description是內容也是全文索引欄位

方案1:like,測試後果斷排除

方案2:直接使用全文搜尋進行,排序消耗大。

方案3:由於查詢需要對Title進行排序,建Title欄位的倒序索引包含其它欄位,最後選擇該方案(建立Title欄位的倒序索引很重要)。

--給出部分欄位
CREATE
TABLE [dbo].[Housetest]( [ID] [int] IDENTITY(1,1) NOT NULL, [Title] [varchar](200) NULL, [Description] [nvarchar](max) NOT NULL, [IsOnline] [tinyint] NOT NULL, CONSTRAINT [PK_Housetest] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

建立索引

CREATE INDEX IX_Housetest ON Housetest
(Title DESC
)
INCLUDE
(ID,
Description,
IsOnline
)

查詢Description包含“美園”,並且如果Title是“美園”則排在第一位,並且以分頁的形式顯示,每頁20條記錄。

select  * from (SELECT  ROW_NUMBER() OVER(Order by (case when Title='美園' Then 1 Else 0 End) desc ) as RowsNumber,ID,Title,Description
  From Housetest
  Where  contains(Description,'美園') and IsOnline=1) tab1 
 where RowsNumber between 1 and 20

 

相關推薦

SQL Server 使用全文索引進行頁面搜尋

建立全文索引 啟動服務  在SQL Server配置管理工具中,找到'SQL Full-text Filter Daemon Launcher'服務用本地使用者啟動。 建立全文目錄  開啟需要建立全文目錄的資料庫-儲存-全文目錄-右鍵新建全文目錄 用語句建立全文目錄  CREA

SQL Server 全文索引介紹(轉載)

所在 ubd exec nchar 配置管理 system data ase 百度搜索 概述 全文引擎使用全文索引中的信息來編譯可快速搜索表中的特定詞或詞組的全文查詢。全文索引將有關重要的詞及其位置的信息存儲在數據庫表的一列或多列中。全文索引是一種特殊類型的基於標記的

SQL Server 全文索引的硬傷(轉載)

本文關鍵字:SQL Server全文索引、CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE等謂詞。 想象這樣一個場景:在DataBase_name.dbo.Table_name中有一個名為Title(標題)和Contents(內容)的欄位,現在需要查詢在Ti

SQL Server全文搜尋(轉載)

看這篇文章之前請先看一下下面我摘抄的全文搜尋的MSDN資料,基本上MSDN上關於全文搜尋的資料的我都copy下來了並且非常認真地閱讀和試驗了一次,並且補充了一些SQL語句,這篇文章本人抽取了一些本人自認為是重點的出來並且加入了一些自己的內容,補充MSDN上沒有的和整理了網上關於全文搜尋的資料至於全文搜尋的效能

SQL Server - 聚集索引 <第六篇>

border 包含 運行 子句 連接 去除 樹結構 創建 一行 聚集索引的葉子頁存儲的就是表的數據。因此,表行物理上按照聚集索引列排序,因為表數據只能有一種物理順序,所以一個表只能有一個聚集索引。   當我們創建主鍵約束時,如果不存在聚集索引並且該索引沒有被明確指定為非聚集

SQL Server索引結構實例

strong insert add http person border blog ace use 目前SQL Server 的索引結構如下: 這個是聚集索引的存放形式: 非聚集索引的方式如下: 它們是以B+樹的數據結構存放的。 相信大家都看過類似的圖,

深入非聚集索引:樓梯SQL Server二級索引

statistic line nts find res rod -c pac 發布 通過大衛·杜蘭特,2017/10/18(第一次出版:2014/11/26) 該系列 本文是樓梯系列的一部分:SQL Server的階梯索引 索引數據庫設計的基礎,告訴開發人員使用數據庫設計

SQL SERVER 聚集索引 非聚集索引 區別

poi 字典 問題 statistic 速度 左右 dbcc 表示 diff 轉自http://blog.csdn.net/single_wolf_wolf/article/details/52915862 一、理解索引的結構   索引在數據庫中的作用類似於目錄在書籍中的作

理解SQL Server索引的概念,原理

contact 不為 post 學習 分享 最小 div 例子 index 轉自:http://www.cnblogs.com/CareySon/archive/2011/12/22/2297568.html 簡介 在SQL Server中,索引是

T-SQL查詢進階--理解SQL Server索引的概念,原理以及其他

工具 def microsoft 需要 blog b- eve 實現 中一 簡介 在SQL Server中,索引是一種增強式的存在,這意味著,即使沒有索引,SQL Server仍然可以實現應有的功能。但索引可以在大多數情況下大大提升查詢性能,在OLAP

SQL SERVER 聚集索引的建立

索引加快檢索表中資料的方法,它對資料表中一個或者多個列的值進行結構排序,是資料庫中一個非常有用的物件。 索引的建立 #1使用企業管理器建立 啟動企業管理器--選擇資料庫------選在要建立索引的表------在表的下拉選單中選擇索引---在快捷選單中選擇新建索引-- 在新建索引對話

SQL Server 效能優化實戰系列(一) SQL Server擴充套件函式的基本概念 使用SQL Server 擴充套件函式進行效能優化 SQL Server Url正則表示式 記憶體常駐 完美解決方案

資料庫伺服器主要用於儲存、查詢、檢索企業內部的資訊,因此需要搭配專用的資料庫系統,對伺服器的相容性、可靠性和穩定性等方面都有很高的要求。        下面是進行籠統的技術點說明,為的是讓大家有一個整體的概念,如果想深入可以逐個擊破;&n

SQL Server 使用bcp進行大資料量匯出匯入

轉載:http://www.cnblogs.com/gaizai/archive/2010/04/17/1714389.html   SQL Server的匯出匯入方式有: 在SQL Server中提供了匯入匯出的介面操作。 在介面操作中又分【複製一個或多個表或檢視的資料】和【編寫查

淺談sql server聚集索引與非聚集索引

今天同事的服務程式在執行批量插入資料操作時,會超時失敗,程式碼debug了幾遍一點問題都沒有,SQL單條插入也可以正常錄入資料,除錯了一上午還是很迷茫,場面一度很尷尬,最後還是發現了問題的根本,原來是另一個同事為了提升查詢效率濫用了索引在搞鬼,沒有合理的運用索引使每次新增和修改資料時效率極低,大批量插入和修改

Sql Server 聚集索引掃描 Scan Direction的兩種方式------FORWARD 和 BACKWARD

最近發現一個分頁查詢儲存過程中的的一個SQL語句,當聚集索引列的排序方式不同的時候,效率差別達到數十倍,讓我感到非常吃驚由此引發出來分頁查詢的情況下對大表做Clustered Scan的時候,不同情況下會選擇FORWARD 或者 BACKWARD差別,以及建立聚集索引時,選擇索引列的排序方式的一些思考廢話不多

SQL Server索引的概念,原理以及其他

在SQL Server中,索引是一種增強式的存在,這意味著,即使沒有索引,SQL Server仍然可以實現應有的功能。但索引可以在大多數情況下大大提升查詢效能,在OLAP中尤其明顯.要完全理解索引的概念,需要了解大量原理性的知識,包括B樹,堆,資料庫頁,區,填充因子,碎片

SQL Server 聚集索引在函式中使用以至失效(案例)

先把資料庫中最耗時的前N個語句查詢出來! SELECT TOP 10 qp.query_plan,qt.text,total_worker_time from sys.dm_exec_query_stats CROSS APPLY sys.dm_exec_sql

連線到 SQL Server 2008 時,在預設的設定下 SQL Server 不允許進行遠端連線可能會導致此失敗 (Microsoft SQL Server,錯誤: 10060)

問題描述:在使用本地sql server 2008進行遠端連線資料庫時,出現錯誤如下:連線到 SQL Server 2005 時,在預設的設定下 SQL Server 不允許進行遠端連線可能會導致此失敗 (Microsoft SQL Server,錯誤: 10060) 解決

SQL Server 資料庫索引

一、什麼是索引 減少磁碟I/O和邏輯讀次數的最佳方法之一就是使用【索引】 索引允許SQL Server在表中查詢資料而不需要掃描整個表。 1.1、索引的好處: 當表沒有聚集索引時,成為【堆或堆表】 【堆】是一堆未加工的資料,以行識別符號作為指向儲存位置的指標。表資料沒有順序

SQL Server 2008索引使用技巧

  微軟MVP及暢銷書《Hitchhiker's Guide SQL Server》的作者Bill Vaughn簡要給出了SQL Server 2008的索引使用技巧。該主題基於Kimberly Tripp和Paul Randall(這兩位是SQL Server高可用性和效