最近遇到个难题,关于SQL语句查询的,希望高手前来指教指教
最近有个朋友的网站SQL查询效率特别低,数据库是MSSQL2005的,数据里是12万。
这个程序是查询手机号码的,比如一些连号啊,顺序号等等。
其中一个字段为:product_name 字段里面都是电话号码
product_name
13600000001
13600000002
13600000003
13601234567
13601234444
13601231230
就像这样的手机号,有的属于ABCDEF型,有的属于ABCABC型,有的属于AAAAA型
我想问下,有没有什么好的查询方式能快速查询出来自己想要类型的电话号码呢?
小弟使用的是 substring 函数,速度有点贼慢,希望高手能指点一二,小弟感激涕零!!!!
------解决方案-------------------- 查询语句 发上来 看看
------解决方案-------------------- 用left函数试试,具体要看你的查询要求
------解决方案-------------------- 要执行多久,where 里用substring 等函数都会慢,可以考虑用 子表查询 然后再限制条件。
------解决方案-------------------- 引用: and substring(p.product_name,8,1)<>substring(p.product_name,9,1) and substring(p.product_name,9,1)=substring(p.product_name,10,1) and substring(p.product_name,9,1)=substring(p.product_name,11,1)
SQ……
这样做是快不起来的。考虑存储进去的时候就标明是啥类型。
现在的话考虑CLR写正则吧,也是一种方式
------解决方案-------------------- 如果你没有其他限定条件。基本上就是表扫描的结果。
------解决方案-------------------- select product_name
from (
select *,substring(p.product_name,8,1) as [8],substring(p.product_name,9,1)as [9]
from TB ) a
where [8]<>[9]
试试效果
------解决方案-------------------- 引用: 引用:select product_name
from (
select *,substring(p.product_name,8,1) as [8],substring(p.product_name,9,1)as [9]
from TB ) a
where [8]<>[9]
试试效果
感觉这样查询多个位置的话,速度也……
这是实际测试出的结论 还是第六感 ,分析出慢哪里了 才能快 。