有如下表:CREATE TABLE [dbo].[tb](
[A] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[B] [datetime] NULL,
 CONSTRAINT [PK_tb] PRIMARY KEY CLUSTERED 
(
[A] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
此表中有250W条记录,并且每月在增加,如何以最快的速度查询到在A字段中是否存在aStr字符补充:A字段中无重复记录,现在暂无法增加硬件来提高速度现在我的办法是用下面的语句来完成的
select A from tb where a=aStr

解决方案 »

  1.   

    完全匹配就用= 包含就用like
      

  2.   

    建一个自增字段identityID,建个索引,
    if exists (select a from tb where identityID>[上次检查过的值]and a like '%aStr%')
       select 'a中存在aStr'
    else
       select 'a中不存在aStr'
      

  3.   

    普通索引类似 like '%内容%' 这样是没用的,还影响插入的效率.
      

  4.   

    这样的索引是不是考虑在业务端用luncent做,用lucent索引文本内容
      

  5.   

    或者通过哈希值来匹配?增加一个字段hashValue,保存文本时存入当前文本的哈希值,查询的时候通过查询条件的哈希值类匹配。哈希值是数字,索引应该很快的。
      

  6.   

    补充一下: 
    是完全匹配 另:每天查询次数在100W次以上~~(这个才是头疼的问题)
    增加补充:
    此表tb的内容,只会一个月增加一次(从其他表导入进来)
      

  7.   

    补充一下: 
    是完全匹配 另:每天查询次数在100W次以上~~(这个才是头疼的问题) 
    增加补充: 
    此表tb的内容,只会一个月增加一次(从其他表导入进来)
    aStr要查询的字符串也是变化的,每次查询的都不一样
      

  8.   


     if exists(select * from 表where charindex('字符',字段)>0)
        print '字符存在'
     else
       print '字符不存在'