创建索引
2.1 使用SQL语言创建索引
例如,下面的SQL语句用于在bookdb数据库中的authors表中的author_id列上创建一个非聚集索引:
SET NOCOUNT OFF   --返回计数
USE bookdb
--判断是否存在author_id_ind,若存在,则先删除
IF EXISTS (SELECT name FROM sysindexes
      WHERE name = 'author_id_ind')
   DROP INDEX authors.author_id_ind
GO
USE bookdb
CREATE INDEX author_id_ind
   ON authors(author_id)
GO
下面的示例为clients表的client_id列创建索引,并且强制唯一性。因为指定了CLUSTERED子句,所以该索引将对磁盘上的数据进行物理排序:
SET NOCOUNT OFF   --返回计数
USE bookdb
IF EXISTS (SELECT name FROM sysindexes
      WHERE name = 'client_id_ind')
   DROP INDEX clients.client_id_ind
GO
USE bookdb
CREATE UNIQUE CLUSTERED INDEX client_id_ind
   ON clients(client_id)
GO
2.2 创建索引的选项设置
2.FILLFACTOR = fillfactor
例如,下面的例子使用FILLFACTOR子句,将其设置为100。FILLFACTOR为100将完全填满每一页,只有确定表中的索引值永远不会更改时,该选项才有用:
IF EXISTS (SELECT name FROM sysindexes
      WHERE name = 'telphone_ind')
   DROP INDEX authors.telphone_ind
GO
USE bookdb
CREATE INDEX telphone_ind
   ON authors(telphone)
   WITH FILLFACTOR = 100
GO
2.3 在视图和计算列上创建索引
例如,下面的SQL语句是在test数据库中创建一个表t1,然后在此表的计算列c上创建一个索引:
USE test
CREATE TABLE t1 (a int, b int, c AS a*b)
GO
CREATE INDEX Idx1 ON t1(c)
GO
INSERT INTO t1 VALUES ('1', '0')
GO
索引的查看和删除
3.1 使用SQL语言
要查看索引信息,可使用存储过程sp_helpindex。例如,下面的SQL语句用于显示book表上的索引信息:
USE bookdb
GO
EXEC sp_helpindex book
GO
例如,下面的SQL语句是删除slients表中的索引client_id_ind:
USE bookdb
GO
DROP INDEX clients.client_id_ind
GO
全文索引
4.1 建立全文目录
例如,下面的SQL语句在bookdb数据库中重建一个现有的全文目录BookDescripCatalog:
USE bookdb
EXEC sp_fulltext_catalog 'BookDescripCatalog', 'rebuild'
4.2 全文查询
4.2.1 CONTAINS
1.词或者短语
例如,下面的SQL语句搜索包含“实例”两个字的书籍名称和价格:
USE bookdb
GO
SELECT book_name,price
FROM book
WHERE CONTAINS(book_name, '实例')
GO
2.词或者短语的前缀
例如,下面的SQL语句是查询以Win开始的书名:
USE bookdb
GO
SELECT book_name,price
FROM book
WHERE CONTAINS(book_name, '"Win*"')
GO
但是如果修改如下:
USE bookdb
GO
SELECT book_name,price
FROM book
WHERE CONTAINS(book_name, 'Win*')
GO
3.使用相近的字符串来查询
例如,下面的SQL语句查询关于3D的实例类书籍:
USE bookdb
GO
SELECT book_name,price
FROM book
WHERE CONTAINS(book_name, '3D NEAR 实例')
GO
4.衍生字
例如,下面的SQL语句查询具有dry形式的词的所有产品:dried和drying等等:
USE Northwind
GO
SELECT ProductName
FROM Products
WHERE CONTAINS(ProductName, ' FORMSOF (INFLECTIONAL, dry) ')
GO
5.给字符串赋予权重
例如,下面的SQL语句就是使用了权重的例子,给“网络”赋予0.8的权重,给“实例”字符串赋予0.4的权重:
USE bookdb
SELECT book_name,price
FROM book
WHERE CONTAINS(book_name, 'ISABOUT (网络 weight(.8), 实例 weight(.4))' )
GO
6.使用变量
在CONTAINS关键字中,还可以使用变量来进行查询。下例就是使用变量而非特定的搜索术语进行查询的例子:
USE bookdb
GO
DECLARE @SearchWord varchar(30)
SET @SearchWord ='网络管理'
SELECT book_name,price FROM book WHERE CONTAINS(book_name, @SearchWord)
GO
4.2.2FREETEXT
例如,下面就是一个使用FREETEXT关键字的例子:
USE bookdb
GO
DECLARE @SearchWord varchar(30)
SET @SearchWord ='网络管理'
SELECT book_name,price FROM book WHERE FREETEXT(book_name, @SearchWord)
GO
4.2.3 CONTAINSTABLE函数
例如,下面的SQL语句就是使用CONTAINSTABLE函数的例子:
USE bookdb
GO
SELECT book_name,price,TTTable.[KEY],TTTable.Rank
FROM book INNER JOIN CONTAINSTABLE(book,book_name,'实例')
AS TTTable ON book_id=TTTable.[KEY]
GO
4.2.4 FREETEXTTABLE函数
例如,下面的SQL语句用于查询
USE bookdb
GO
SELECT book_name,price,FTable.[KEY],FTable.Rank
FROM book INNER JOIN FREETEXTTABLE(book,book_name,'实例')
AS FTable ON book_id=FTable.[KEY]
GO