起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 379|回复: 13

【结贴】SQL的效率问题 尚工请进

[复制链接]
发表于 2009-9-22 18:44:47 | 显示全部楼层 |阅读模式
select  top 100* from BZZLXX where (ZLBS not in (SELECT TOP 200 ZLBS FROM BZZLXX  where 1=1and 1=1 and BZMC like '%六角%' order by djh))  and 1=1and 1=1 and BZMC like '%六角%' order by djh

我使用这个进行分页

当数据库实际条件 BZMC like '%六角%'  >300 (目前测试知道的)
就会卡住十几秒钟甚至更久

我直接放在标准数据集里测试的

那语句在查询分析器里只要1秒

在标准资料信息表那,如果资源还在你可以帮我看看么

若是换成条件
select  top 100* from BZZLXX where (ZLBS not in (SELECT TOP 100 ZLBS FROM BZZLXX  where 1=1 and JYKS like '%建材室%' and 1=1 order by djh)) and 1=1 and JYKS like '%建材室%' and 1=1 order by djh
就不会出现这么久
回复

使用道具 举报

发表于 2009-9-23 09:49:07 | 显示全部楼层
资源到有,不知道你的那个like过滤条件怎么加进去的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 11:55:30 | 显示全部楼层
你试上面那两个SQL语句的例子就知道情况了
like 就象1楼的例子那样写的啊,因为系统有个模糊筛选的操作
回复 支持 反对

使用道具 举报

发表于 2009-9-23 15:06:20 | 显示全部楼层
把sql语句里面的那个order by去掉呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 15:51:07 | 显示全部楼层
拿掉order by djh好像快了

order by djh 是我建的索引,客户要求必须按这个排序的
不要这个没办法啊
回复 支持 反对

使用道具 举报

发表于 2009-9-23 15:54:52 | 显示全部楼层
你都拿掉了么?
只拿掉里面的那个order by
或者使用数据集的客户端排序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 16:09:04 | 显示全部楼层
最初由 shangxy 发布
[B]你都拿掉了么?
只拿掉里面的那个order by
或者使用数据集的客户端排序。 [/B]


拿掉里面的那个order by

查询出来的数据就不正确了
回复 支持 反对

使用道具 举报

发表于 2009-9-23 17:07:49 | 显示全部楼层
楼主,你把TSqlDataSet替换成TQuery可以吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 17:14:25 | 显示全部楼层
最初由 zfang 发布
[B]楼主,你把TSqlDataSet替换成TQuery可以吗? [/B]


怎么换啊

我数据集体必须放在业务信息的,因为有个子窗体要调用相同记录的
回复 支持 反对

使用道具 举报

发表于 2009-9-23 17:23:43 | 显示全部楼层
可以,不过要你自己用代码来控制数据集的创建、打开、以及子窗体对数据集的访问。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-16 00:08 , Processed in 0.044066 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表