sqlserver性能优化--呼叫中心来电归属地查询

sqlserver性能优化--呼叫中心来电归属地查询,第1张

概述数据21万多,对【CHARINDEX和SUBSTRING】和【In和Or】在是否有索引的条件下的检测和比较。 1. CHARINDEX SELECT addressFROM PhoneToAddressInfo WHERE (CHARINDEX(Phone, '15201956983') = 1) 不创建索引:表 'PhoneToAddressInfo'。扫描计数 1,逻辑读 942 次,物理读

数据21万多,对【CHARINDEX和SUBSTRING】和【In和Or】在是否有索引的条件下的检测和比较。


1. CHARINDEX
SELECT addressFROM PhonetoAddressInfo WHERE (CHARINDEX(Phone,'15201956983') = 1)
不创建索引:表 'PhonetoAddressInfo'。扫描计数 1,逻辑读 942 次,物理读 0 次,预读 0 次。cpu 时间 = 650 毫秒,耗费时间 = 650 毫秒。
创建索引:表 'PhonetoAddressInfo'。扫描计数 1,逻辑读 955 次,物理读 0 次,预读 0 次。cpu 时间 = 734 毫秒,耗费时间 = 736 毫秒。

结论:CHARINDEX查询的列创建索引没有实际的意义,因为CHARINDEX不走索引和like’%---‘相似。

2.SUBSTRING
SELECT Address FROM PhonetoAddressInfo WHERE phone=SUBSTRING('15201956983',1,7)
不创建索引:表 'PhonetoAddressInfo'。扫描计数 1,逻辑读 942 次,物理读 0 次,预读 0 次。cpu 时间 = 75 毫秒,耗费时间 = 75 毫秒
创建索引:表 'PhonetoAddressInfo'。扫描计数 1,逻辑读 3 次,物理读 0 次,预读 0 次。cpu 时间 = 0 毫秒,耗费时间 = 0 毫秒。

结论:SUBSTRING查询的列创建索引在查询时有着本质的提高,合理使用提高查询性能

3.IN
'PhonetoAddressInfo'。扫描计数 3,逻辑读 10 次,物理读 0 次,预读 0 次。cpu 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SELECT Address FROM PhonetoAddressInfo WHERE phone in (SUBSTRING('15201956983',7),SUBSTRING('18926175999',SUBSTRING('13150105555',7))



4.OR
表 'PhonetoAddressInfo'。扫描计数 3,逻辑读 10 次,物理读 0 次,预读 0 次。cpu 时间 = 0 毫秒,耗费时间 = 0 毫秒。
SELECT Address FROM PhonetoAddressInfo WHERE phone=SUBSTRING('15201956983',7) or phone=SUBSTRING('18926175999',7) or phone=SUBSTRING('13150105555',7)



结论: or和in的效率几乎一样 1、当IN(条件列表) 中的条件列表是少量值时,它会解释成OR连接,即最后编译成和OR连接一模一样的语句; 2、当IN(条件列表) 中的条件列表很长时,或者你使用OR方法来连接条件并且连接数量很多时,则它们最后的解释效果也是一样的,即都是把条件列表创建为一个哈希表,然后和被查询的表中的行进行对比

总结

以上是内存溢出为你收集整理的sqlserver性能优化--呼叫中心来电归属地查询全部内容,希望文章能够帮你解决sqlserver性能优化--呼叫中心来电归属地查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1176956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存