40万数据的SQL查询,怎么优化select * from table,不优化要执行10秒啊

yc406740872 2010-12-03 10:39:36
40万数据的SQL查询,怎么优化select * from table,不优化要执行10秒啊,,我是查询全部字段,所以必须seelct * ,这样一来,页面要执行10秒才能被执行完,,怎么进行优化啊??

还有,就是 rs.recordcount ,查询总记录数,也要执行5秒,我在本地测试的,传上服务器,执行时间会更长,请问有什么方法解决吗??
...全文
1289 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
liulei0102 2010-12-14
  • 打赏
  • 举报
回复
谁让你用“*”通配符的呢!你查啥写啥不就省事多了!
lenqen 2010-12-14
  • 打赏
  • 举报
回复
可能是游标问题,我通常用Forward Only,虽然这样不能用RECORDCOUNT属性,但效率高很多。
至于RECORDCOUNT属性,可以用MOVE NEXT加一个计数器实现。
Nichel168 2010-12-14
  • 打赏
  • 举报
回复
select * 这样写很费资源的。还是要需要查询的字段列出来。
测试后执行速度就要稍好些。
还有查询记录数的时候,重新写个sql查询,你看那种方式更快。
chinank 2010-12-08
  • 打赏
  • 举报
回复 1
楼主的问题是个伪命题
你40万数据取出来干嘛,你想全部在一个页面显示吗?
多数电脑的IE会被你这40万数据搞死的

你只需要取出你自己想要的数据就可以了,where后面字段,一定要加index

至于count,不要用recordcout,要用
selcect count(1) from xxx 这样用,count(*)会慢一点
取的时候,只取rs(0)就知道是多少了

=====================================================
楼上说的很准确, 另外我补充一点,

select * ……,这样也浪费资源, 只读取你有用的字段即可,

索引+存储过程+ sql语句优化 缺一不可。
小丫头 2010-12-08
  • 打赏
  • 举报
回复
用存储过程呗
youngsheep 2010-12-06
  • 打赏
  • 举报
回复
楼主的问题是个伪命题
你40万数据取出来干嘛,你想全部在一个页面显示吗?
多数电脑的IE会被你这40万数据搞死的

你只需要取出你自己想要的数据就可以了,where后面字段,一定要加index

至于count,不要用recordcout,要用
selcect count(1) from xxx 这样用,count(*)会慢一点
取的时候,只取rs(0)就知道是多少了
gentle_sword 2010-12-04
  • 打赏
  • 举报
回复
用ms sql加存储过程
  • 打赏
  • 举报
回复
goodsname 肯定要建立索引 like本身就快不了多少
xd521 2010-12-04
  • 打赏
  • 举报
回复
select * from tb_goods where goodsname like '%1%'
你说你要取所有列的数据集,那你用的*,没有问题
如果你要进行模糊查询,那你用%%,也没有问题
没法优化了
这样的需求,存储过程也无济于事,
我理解你的需求就是:在40万条数据中找“商品编码”列任意部分包含“1”的数据
yc406740872 2010-12-04
  • 打赏
  • 举报
回复
我的是个库存系统,ASP+SQLSERVER。。。商品都存在一个tb_goods表里面,大约30-40万吧。。我做的搜索,就是很简单的搜索 goodsname(商品编码)字段,当然ID是主键索引,我要查goodsname字段,是不是将goodsname字段建立非聚集索引??楼上说不用like,那用什么查询语句呢??

我用传统的like查询,要执行10多秒呀。。请大家帮帮忙。

就以这段SQL语句进行索引的修改(*我是要查所有字段):select * from tb_goods where goodsname like '%%'
namesliu 2010-12-04
  • 打赏
  • 举报
回复
晕。。。。不能,为什么 不加 where
Ygb_Prince 2010-12-04
  • 打赏
  • 举报
回复
我想你是用asp边sqlserver吧?
1,清理好数据表的沉余字段,可以建立字表作为关联,记得为关键字段(需要作为条件的字段都可以设置为字段,不要太多要合理)添加索引;
2,获取数据的数目,可以用select count(id) from table 以id作为索引;
3,合理的化分页
zming 2010-12-04
  • 打赏
  • 举报
回复
where xxx like '%xxx%' 这种用法不使用索引,建立索引也没用的。

只有

where xxx like 'xxx%' 才会使用到索引
xmrxw 2010-12-04
  • 打赏
  • 举报
回复
你可以找一下通用存储过程代码,百万级别的数据!
kkbac 2010-12-04
  • 打赏
  • 举报
回复
like语句本来就慢, 需要的字段上建议索引啊.
phuai007 2010-12-04
  • 打赏
  • 举报
回复
40万数据,最好是加存储过程了。
huangli21 2010-12-04
  • 打赏
  • 举报
回复
存储过程 必须的
hookee 2010-12-03
  • 打赏
  • 举报
回复
为何要 rs.recordcount 取总数? 该不会要把所有数据都读出来?一般都会加WHERE条件的
id如果建立过索引的话,可以用 SELECT COUNT(*) 取总数.
要查询的字段加索引, 尽量避免用LIKE '%xx%'类型的查询
xuStanly 2010-12-03
  • 打赏
  • 举报
回复
什么数据库呀?40万数据都扛不住?

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧