知识大全 SQL2005CLR函数扩展 - 关于山寨索引
Posted 索引
篇首语:药农进山见草药,猎人进山见禽兽。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL2005CLR函数扩展 - 关于山寨索引相关的知识,希望对你有一定的参考价值。
SQL2005CLR函数扩展 - 关于山寨索引 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
本文只是一个山寨试验品 思路仅供参考 原理介绍:索引建立 目录结构划分方案也只是很简易的实现了一下 通过unicode把任意连续的两个字符(中文或英文)分为 个字节来做四层目录 把索引的内容对应的主关键字(主要为了使用sql索引和唯一性)作为文件名 两个字符在索引内容中的位置作为文件后缀来存储 文件本身为 字节 不保存任何信息 比如一条数据 pk 山寨索引 山寨索引 四个字的unicode为[ ]: [ ]: [ ]: [ ]: [ ]: [ ]: [ ]: [ ]: 那么对应的文件结构为 / / / / /pk / / / / /pk / / / / /pk 索引使用 比如搜索 寨索引 则搜索 / / / / / 目录下的所有文件 然后根据 pk 的文件后缀名 去看 / / / / /pk 文件是否存在 依次类推 最后返回一个结果集 实用性具体的实用性还有待验证 这只是实现了精确的like搜索 而不能做常见搜索引擎的分词效果 另外海量数据重建索引的性能也是面临很严峻的问题 比如cpu负载和磁盘io负载 关于windows一个目录下可以保持多少个文件而不会对文件搜索造成大的性能损失也有待评估 不过这个可以考虑根据主键的文件名hash来增加文件目录深度降低单一目录下的文件数量 演示效果实现了针对test标的name和caption两个字段作索引搜索 设置和获取索引文件根目录 select dbo xfn_SetMyIndexFileRoot( d:/MyIndex ) select dbo xfn_GetMyIndexFileRoot() 建立测试环境 go create table test( id uniqueidentifier name nvarchar ( ) caption nvarchar ( )) insert into test select top newid () 我的索引 测试 from sysobjects insert into test select top newid () 我的测试 索引 from sysobjects insert into test select top newid () 测试索引 测试索引 from sysobjects insert into test select top newid () 我的索引 索引 from sysobjects create index i_testid on test( id) 建立索引文件 declare @t int select @t= dbo xfn_SetKeyForMyIndex( id testIndex name + + caption) from test 查询数据 select a * from test a dbo xfn_GetKeyFromMyIndex( 测试 索引 我的 testIndex ) b where a id= b pk/* C EA DF A A E BD F EED 我的索引 测试 DD B CD F F BB A F 我的索引 测试 C A C F C BA CE A E E 我的索引 测试 C BF FB F FB A EC EAD E 我的测试 索引 BBF CC DBB FCB B EB D E DD F 我的测试 索引 B D E A CD F FA A 我的测试 索引 */ drop table test clr代码如下:编译为MyFullIndex dll复制代码 代码如下:
部署的sql脚本如下 drop function dbo xfn_SetMyIndexFileRoot drop function dbo xfn_GetMyIndexFileRoot drop function dbo xfn_GetKeyFromMyIndex drop function dbo xfn_SetKeyForMyIndex drop assembly MyFullIndex go CREATE ASSEMBLY MyFullIndex FROM d:/SQLCLR/MyFullIndex dll WITH PERMISSION_SET = UnSAFE; go 索引搜索 CREATE FUNCTION dbo xfn_GetKeyFromMyIndex ( @word nvarchar ( max ) @indexName nvarchar ( )) RETURNS table ( pk nvarchar ( )) AS EXTERNAL NAME MyFullIndex UserDefinedFunctions GetIndex go 索引建立 CREATE FUNCTION dbo xfn_SetKeyForMyIndex ( @pk nvarchar ( ) @indexName nvarchar ( ) @word nvarchar ( max )) RETURNS int AS EXTERNAL NAME MyFullIndex UserDefinedFunctions SetIndex go 获取索引文件根目录 CREATE FUNCTION dbo xfn_GetMyIndexFileRoot () RETURNS nvarchar ( max ) AS EXTERNAL NAME MyFullIndex UserDefinedFunctions GetRoot go 设置索引文件根目录(默认目录为 d:/myindex ) CREATE FUNCTION dbo xfn_SetMyIndexFileRoot ( @FileRoot nvarchar ( max )) RETURNS bit AS EXTERNAL NAME MyFullIndex UserDefinedFunctions SetRoot go cha138/Article/program/SQLServer/201404/30570相关参考
SQL2005CLR函数扩展-解析天气服务的实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
SQL2005CLR函数扩展-数据导出的实现详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
SQL2005CLR函数扩展-深入环比计算的详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!环比
解析SQL2005中如何使用CLR函数获取行号 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! S
知识大全 使用 SQL Server 2005中的 CLR 集成(2)
使用SQLServer2005中的CLR集成(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 使用 SQL Server 2005中的 CLR 集成(3)
使用SQLServer2005中的CLR集成(3) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 使用 SQL Server 2005中的 CLR 集成(1)
使用SQLServer2005中的CLR集成(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Sql Server 2005自定义Split函数
SqlServer2005自定义Split函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 要
专家谈SQLServer2005CLR 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在SQLS
关于SQL访问注册表的扩展存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQLServ