sqlserver的like '%xxx%'优化,全文索引

2000万行的数据表,首先对Address字段做'%xxx%'模糊查询

这是估计的查询计划

这是估计的实际查询结果,用了37秒才查询完成

 

 

 

 

还是之前的数据,但是这一次使用'xxx%'来做查询,现在还没有做索引

 

查询速度为10秒,依然是做了全表扫描

 

 

 

 

接下来的这个不是模糊查询,直接的=,查询多了一个步骤“并行度”

 

三秒钟完成查询,也是很慢的,应该都是走了全表扫描

 

 

 

 

现在为Address字段建立一个普通索引

 

 

建好普通索引之后尝试进行'%xxx%'查找,从查询计划来看,'%xxx%'是无法利用到普通索引的

 

 

果然,查询耗时和没有建立索引之前一样,基本没变

 

 

 

现在尝试查询'xxx%',根据查询计划可以看到,这种查询可以走刚刚我们建立的普通索引

 

查询结果为4秒,之前没有建立索引的时候查询结果为10秒,缩小了一倍

 

 

接着,直接=查找,可以看出利用了索引

 

查询耗时0秒,降到了毫秒级别,从这点可以看出,普通的非聚集索引对于直接匹配(=)查询的支持是最好的,然后是like 'xxxx%',而like '%xxx%'不支持

 

 

然后我们在Address字段上建立一个全文索引

 

 

 

下面是全文索引的使用语法,以及查询过程

 

全文索引添加之后,查询时间为2秒,还是有点慢,后来测试了几次,一般是在一秒左右

 

 

 

 

 

另外SQLServer2008的全文索引貌似不会立马建立完成,而是需要在后台等待一段时间才能完全建立,在这段时间里面查询返回的结果是不一样的。

如下图,两次查询后一次的结果比前一次多,全文索引正在建立中,最后会有一个稳定的状态。

 

转载于:https://www.cnblogs.com/jimaojin/p/8425920.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL Server中的LIKE操作符用于在WHERE子句中搜索与指定模式匹配的字符串。它使用通配符来匹配任意字符或一组字符。%是一个通配符,表示匹配任意数量的任意字符。例如,使用LIKE '%apple%'将匹配包含“apple”字符串的任何值,无论它们在字符串中的位置如何。 ### 回答2: 在SQL Server中,我们可以使用LIKE运算符来匹配指定列中的模式。LIKE运算符用于希望查找具有特定字符模式的字符串的情况。该模式可以使用两个通配符进行匹配:百分号(%)和下划线(_)。 %表示任何字符序列(包括空字符序列),而_表示任何单个字符。当在LIKE运算符的右侧使用%时,它会匹配与前面任何一组字符相匹配的任何字符,包括空字符。在左侧使用%则与右侧相反,其中它将匹配与其后面任何一组字符相匹配的任何字符,包括空字符。 以下是使用LIKE运算符的一些示例: 1.查找以“S”开头的客户: SELECT * FROM Customers WHERE CompanyName LIKE 'S%'; 2.查找以“s”结尾的客户: SELECT * FROM Customers WHERE ContactName LIKE '%s'; 3.查找包含“d”和“r”字符的客户: SELECT * FROM Customers WHERE ContactName LIKE '%d%r%'; 4.查找以“ne”开头的任何字符串: SELECT * FROM Customers WHERE ContactName LIKE 'ne%'; 5.查找包含10个字符的任何字符串: SELECT * FROM Customers WHERE ContactName LIKE '__________'; 在使用LIKE运算符时,需要注意一些细节。首先,为了避免使用通配符造成的性能问题,应尽可能使用精确匹配。其次,不要在LIKE运算符的左侧使用%或_,因为这会使查询成为不可索引的。最后,如果您要搜索包含通配符的字符模式的文本,您可能需要使用ESCAPE子句来定义转义字符。 ### 回答3: SQL Server 中的 like % 用法是指查询包含某个字符串的所有数据。其中,% 是通配符,表示可以匹配任何字符,也可以不匹配任何字符。 例如,我们有一个名为 students 的表,其中有一个名为 name 的字段,我们想要查询出所有姓名中包含字符“有”的学生,可以使用以下 SQL 语句: ``` SELECT * FROM students WHERE name LIKE '%有%'; ``` 这条语句将会返回所有姓名中包含“有”字符的学生。 另外,还可以结合其他通配符使用 like %。例如,下面的语句将会查询所有以“小”字开头、以“明”字结尾的姓名的学生: ``` SELECT * FROM students WHERE name LIKE '小%明'; ``` 在 like % 中,% 的位置也可以灵活使用。比如,如果想要查询所有名字长度为 3 个字符并且以“刘”字开头的学生,可以使用以下语句: ``` SELECT * FROM students WHERE name LIKE '刘__'; ``` 其中,两个下划线表示需要匹配两个任意字符,从而使名字长度为 3 个字符。 总之,like % 是 SQL 查询中非常重要的一个功能,可以方便地进行模糊查询,并且可以与其他通配符灵活结合使用,提高查询的准确性和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值