SQLSERVER 建立全文检索

摘要:
*/SELECT*FROMFullTextIndexingWHERECHARINDEX0/*执行了几遍,耗时15338毫秒SQLServer分析和编译时间:CPU时间=0毫秒,占用时间=0毫秒。扫描计数1,逻辑读取15633次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。*/--执行了17秒,不降反而上升了!!~--重新生成全文目录!

  1. 在CODE上查看代码片
    1. --创建测试表
    2. --DROPTABLEFullTextIndexing
    3. CREATETABLEFullTextIndexing
    4. (
    5. IDINTIDENTITY(1,1)NOTNULL,
    6. SentenceVARCHAR(MAX)
    7. )
    8. --创建聚集索引
    9. ALTERTABLEFullTextIndexingADDCONSTRAINTPK_FullTextIndexingPRIMARYKEYCLUSTERED(IDASC)
    10. GO
    11. --将"全文搜索概述"页面的文字全部拷贝到txt,然后倒入到表FullTextIndexing中
    12. --https://msdn.microsoft.com/zh-cn/library/ms142547(v=sql.105).aspx
    13. --重复15次,从47行变为154万行
    14. INSERTINTOFullTextIndexing(Sentence)
    15. SELECTSentenceFROMFullTextIndexing
    16. GO15
    17. SELECTCOUNT(*)FROMFullTextIndexing


    在CODE上查看代码片
    1. --【注】删除的语句不要执行!


    在CODE上查看代码片
    1. --创建全文目录
    2. --https://msdn.microsoft.com/zh-cn/LIBRARY/ms189520(v=sql.105).aspx
    3. CREATEFULLTEXTCATALOG[Catalog_Test]
    4. WITH
    5. ACCENT_SENSITIVITY=ON--区分重音
    6. ASDEFAULT--默认目录
    7. AUTHORIZATION[dbo];--全文目录的所有者
    8. GO
    9. --更改全文目录的属性
    10. --https://msdn.microsoft.com/zh-cn/LIBRARY/ms176095(v=sql.105).aspx
    11. ALTERFULLTEXTCATALOG[Catalog_Test]
    12. REBUILDWITHACCENT_SENSITIVITY=ON;--重新生成整个目录并区分重音
    13. --REORGANIZE;--重新组织全文目录
    14. --ASDEFAULT;--指定此目录为默认目录
    15. GO
    16. --从数据库中删除全文目录(先删除全文索引)
    17. --https://msdn.microsoft.com/zh-cn/LIBRARY/ms188403(v=sql.105).aspx
    18. DROPFULLTEXTCATALOG[Catalog_Test];
    19. GO
    20. --创建干扰字表
    21. --https://msdn.microsoft.com/zh-cn/library/cc280405(v=sql.105).aspx
    22. CREATEFULLTEXTSTOPLIST[Stoplist_Test]
    23. FROMSYSTEMSTOPLIST
    24. AUTHORIZATION[dbo];
    25. GO
    26. --添加删除干扰字
    27. --https://msdn.microsoft.com/zh-cn/library/cc280871(v=sql.105).aspx
    28. ALTERFULLTEXTSTOPLIST[Stoplist_Test]
    29. ADDN'乎'LANGUAGE2052;
    30. GO
    31. ALTERFULLTEXTSTOPLIST[Stoplist_Test]
    32. DROPN'乎'language2052;
    33. --ALLLANGUAGE'English'
    34. --ALL
    35. GO
    36. --从数据库中删除全文本非索引字表
    37. --https://msdn.microsoft.com/zh-cn/library/cc280482(v=sql.105).aspx
    38. DROPFULLTEXTSTOPLIST[Stoplist_Test];
    39. GO
    40. --创建全文索引
    41. --https://msdn.microsoft.com/zh-cn/library/ms187317(v=sql.105).aspx
    42. CREATEFULLTEXTINDEXON[dbo].[FullTextIndexing]
    43. (SentenceLANGUAGE2052)--索引列,明确列中存储的语言,方便过滤
    44. KEYINDEXPK_FullTextIndexing--全文键:当前表中唯一索引名称
    45. ON[Catalog_Test]--指定全文目录
    46. WITH(
    47. STOPLIST[Stoplist_Test],--指定全文非索引字表
    48. CHANGE_TRACKINGAUTO--自动填充
    49. );
    50. GO
    51. --更改全文索引的属性
    52. --https://msdn.microsoft.com/zh-cn/library/ms188359(v=sql.105).aspx
    53. --激活全文索引
    54. ALTERFULLTEXTINDEXON[dbo].[FullTextIndexing]ENABLE;
    55. GO
    56. --删除全文索引
    57. --https://msdn.microsoft.com/zh-cn/library/ms184393(v=sql.105).aspx
    58. DROPFULLTEXTINDEXON[dbo].[FullTextIndexing];
    59. GO

    在CODE上查看代码片
    1. --测试常规查询方法(先查询全部数据,放到内存:154万行31秒)
    2. SELECT*FROMFullTextIndexing
    3. SETSTATISTICSIOON
    4. SETSTATISTICSTIMEON
    5. SELECT*FROMFullTextIndexingWHERESentenceLIKE'%全文索引%'
    6. /*执行了几遍,耗时13440毫秒
    7. SQLServer分析和编译时间:
    8. CPU时间=0毫秒,占用时间=0毫秒。
    9. (229376行受影响)
    10. 'FullTextIndexing'。扫描计数1,逻辑读取15633次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。
    11. SQLServer执行时间:
    12. CPU时间=11591毫秒,占用时间=13440毫秒。
    13. */
    14. SELECT*FROMFullTextIndexingWHERECHARINDEX('全文索引',Sentence)<>0
    15. /*执行了几遍,耗时15338毫秒
    16. SQLServer分析和编译时间:
    17. CPU时间=0毫秒,占用时间=0毫秒。
    18. (229376行受影响)
    19. 'FullTextIndexing'。扫描计数1,逻辑读取15633次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。
    20. SQLServer执行时间:
    21. CPU时间=12714毫秒,占用时间=15338毫秒。
    22. */
    SQLSERVER 建立全文检索第5张

    在CODE上查看代码片
    1. --使用全文索引的方法:
    2. SELECT*FROM[dbo].[FullTextIndexing]WHEREFREETEXT(Sentence,'全文索引');
    3. /*执行了几遍,耗时17402毫秒
    4. SQLServer分析和编译时间:
    5. CPU时间=16毫秒,占用时间=21毫秒。
    6. (851968行受影响)
    7. 'FullTextIndexing'。扫描计数1,逻辑读取15633次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。
    8. SQLServer执行时间:
    9. CPU时间=2230毫秒,占用时间=17402毫秒。
    10. */
    SQLSERVER 建立全文检索第7张

    在CODE上查看代码片
    1. --执行了17秒,不降反而上升了!!~


    在CODE上查看代码片
    1. --重新生成全文目录!~再执行(更多方法有待参考:使用全文搜索查询SQLServer)
    2. --https://msdn.microsoft.com/zh-cn/library/ms142559(v=sql.105).aspx
    3. ALTERFULLTEXTCATALOG[Catalog_Test]REBUILD;
    4. GO
    5. SELECT*FROM[dbo].[FullTextIndexing]WHEREFREETEXT(Sentence,'全文索引');
    6. SELECT*FROM[dbo].[FullTextIndexing]WHERECONTAINS(Sentence,'全文索引');
    7. SELECT*FROM[dbo].[FullTextIndexing]WHERECONTAINS(Sentence,'全文AND索引');
    8. /*这时快多了!~不到1秒就查询完成!~但是返回的行数才1000多行
    9. SQLServer分析和编译时间:
    10. CPU时间=0毫秒,占用时间=0毫秒。
    11. (8853行受影响)
    12. 'FullTextIndexing'。扫描计数0,逻辑读取27121次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。
    13. SQLServer执行时间:
    14. CPU时间=78毫秒,占用时间=944毫秒。
    15. */
    16. SETSTATISTICSIOOFF
    17. SETSTATISTICSTIMEOFF

    1. 不断地执行就会找出规律:
    2. 表扫描次数为0。
    3. 逻辑读也越来越多,耗时越来越多,查询返回的行数也越来越多,性能越来越差!~比"like"还差
    4. 最后还得重建重组(REBUILD/REORGANIZE)全文索引目录
    5. 逻辑读取27121次
    6. 逻辑读取945268次
    7. 逻辑读取1212885次
    8. 逻辑读取1407846次
    9. 逻辑读取1736686次
    10. 逻辑读取1953265次


    在CODE上查看代码片
    1. --查询句词拆分结果.可以看到按什么词语进行匹配查询
    2. select*fromsys.dm_fts_parser('全文索引',2052,5,0)
    3. --如果只需要全文键或排名的信息,可使用表值函数
    4. --使用表值函数的方法可以使用联接提示或查询提示(LOOP/MERGE/HASH)
    5. ALTERFULLTEXTCATALOG[Catalog_Test]REBUILD;
    6. GO
    7. ALTERFULLTEXTCATALOG[Catalog_Test]REORGANIZE;
    8. GO
    9. SELECT*FROM[dbo].[FullTextIndexing]t1
    10. INNERJOINCONTAINSTABLE([FullTextIndexing],Sentence,'概述')ASt2
    11. ONt1.ID=t2.[KEY]
    12. GO
    13. SELECT*FROM[dbo].[FullTextIndexing]t1
    14. INNERJOINFREETEXTTABLE([FullTextIndexing],Sentence,'概述',LANGUAGE2052,1000)ASt2
    15. ONt1.ID=t2.[KEY]
    16. ORDERBYt2.RANKDESC;
    17. GO


    在CODE上查看代码片
    1. --相关视图:
    2. select*fromsys.syslanguages
    3. select*fromsys.fulltext_indexes
    4. select*fromsys.fulltext_catalogswherename='Catalog_Test'
    5. select*fromsys.dm_fts_active_catalogswherename='Catalog_Test'
    6. select*fromsys.fulltext_stoplistswherename='Stoplist_Test'
    7. select*fromsys.fulltext_stopwordswherestoplist_id=5--andlanguage_id=2052
    8. select*fromsys.dm_fts_parser('全文索引',2052,5,0)

免责声明:文章转载自《SQLSERVER 建立全文检索》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MySQL主从复制什么原因会造成不一致,如何预防及解决?webpackJsonp is not defined?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

机器学习--用朴素贝叶斯分类法辨别男女声音

和前面介绍到的kNN,决策树一样,贝叶斯分类法也是机器学习中常用的分类方法。贝叶斯分类法主要以概率论中贝叶斯定理为分类依据,具有很广泛的应用。本文通过一个完整的例子,来介绍如何用朴素贝叶斯分类法实现分类。主要内容有下:     1、条件概率与贝叶斯定理介绍     2、数据集选择及处理     3、朴素贝叶斯分类器实现     4、测试分类效果     5...

golang mgo的mongo连接池设置:必须手动加上maxPoolSize

本司礼物系统使用了golang的 mongo库 mgo,中间踩了一些坑,总结下避免大家再踩坑 golang的mgo库说明里是说明了开启连接复用的,但观察实验发现,这并没有根本实现连接的控制,连接复用仅在有空闲连接时生效,高并发时无可用连接会不断创建新连接,所以最终还是需要程序员自行去限制最大连接才行。 废话不多说,开始上代码 GlobalMgoSessi...

char *内容输出

//test{int i;int width = 32;CString tmp;CString str0; for(i=0; i<len; i++){//tmp.Format(L"%6.6X", i);tmp.Format(L"%2.2X ", (unsigned char)pData[i]);str0+=tmp;} str0 = str0;TRAC...

SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)

五、锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误。设置事务隔离级别将影响整条连接。 SQL Server 数据库引擎支持所有这些隔离级别: · 未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) · 已提交读(数据库引擎的默认级...

python模块--os模块

打印文件的绝对路径:os.path.abspath(__file__) os.path.dirname("/root/python/test.py")   #只取目录名'/root/python' os.path.dirname(os.path.dirname("/root/python/test.py"))   '/root' import os B...

“性能监视器”监视系统性能的基本设置

性能监视器是一个 Microsoft 管理控制台 (MMC) 管理单元,提供用于分析系统性能的工具。仅从一个单独的控制台,即可实时监视应用程序和硬件性能,自定义要在日志中收集的数据,定义警报和自动操作的阈值,生成报告以及以各种方式查看过去的性能数据。 启动 Windows 性能监视器:搜索栏输入 perfmon --> 回车。 一、常用计数器 运行截...