请教,这断SQL如何提高速度

来源:百度知道 编辑:UC知道 时间:2024/09/21 14:51:37
总的记录有10W条,有一个标记字断F_Pk用来记录当前子集是否是上一个的子集,我用一个循环执行下面的下面两条SQL

select TOP 1 * from T_Products where (F_ProType=0 or F_ProType=10) and F_isUsed=0 and DATALENGTH(F_Pk)>" & ProLayer & " and F_Pk like '" & rs("F_Pk") & "1%' order by DATALENGTH(F_Pk) DESC"

...

select TOP 1 * from T_Products where (F_ProType=0 or F_ProType=10) and F_isUsed=0 and DATALENGTH(F_Pk)>" & ProLayer & " and F_Pk like '" & rs("F_Pk") & "2%' order by DATALENGTH(F_Pk) DESC

.....
F_Pk是varchar字符型,并且在数据库结构中我做了索引,内容如F212332222......
F_ProType,F_isUsed是int类型

10W条执行完需要9小时,请问如何写才能提高速度?
因为是的本机上运行的,服务器也装在本机上,所以存储过程的好像不能解决根本问题,关健是语名如何写才能优化速度

其实rs("")是个记录,datelength("") 只是取得 F_Pk 的长度,语名是这样的

set rs=conn.execute("select F_Pk from T_Products where F_isUsed=0")

do while not rs.eof
ProLayer=length(rs("F_Pk"

此段SQL一个致命的性能问题,就是在F_PK加了各种函数:
如DATALENGTH(),rs()

10W条记录并不算是大数据量,而给PK加上这些函数后,就会使其索引失效。

1、建议楼主按需求重新分析,看可否将PK外的函数去掉;
2、如果必须用这样的SQL,那么建立加上函数后的索引。

不管外面加的是什么,都会直接使主键的索引失效,这是慢的最主要原因!

不太明白楼主的需求,不过可以讨论一下
把他们移动到存储过程上去。可以提高一点速度