如:sql="select count(*) as num from prod where (available_time + update_time > CONVERT(DATETIME, getdate(), 102)) and pro_status=1 "
就需要4-6秒。请高手指点。或者需要什么样的技术可以提高网站的速度!分数不多,请包函!
24 个解决方案
#1
索引!
#2
谢谢楼上的回复,我做过索引!!
#3
dd
#4
4-6秒查询80万的数据,需要这么时间我觉得是正常的
这么多数据也不算小了,
如果想要更快,你可试一下加索引
create index idx_prod on prod (available_time,update_time )
这么多数据也不算小了,
如果想要更快,你可试一下加索引
create index idx_prod on prod (available_time,update_time )
#5
CONVERT(DATETIME, getdate(), 102) 这里转换无效果吧,等价于getdate()
单键索引
available_time ,update_time
pro_status 如果状态很多也建索引
select count(1) as num from prod where available_time > getdate()-update_time and pro_status=1
试试看哈
#6
贊同.
#7
1. 你先在prod后面加with(nolock) 看看是不是更新太多,以至于查表的时候引起锁等待
如果1不行,那么试试
2.
create view v_test
as
select available_time+update_time as time1,pro_status
from dbo.prod
create index ix_v_test
on test(time1,pro_status)
select count(1) from v_test with(nolock) where time1>CONVERT(DATETIME, getdate(), 102)) and pro_status=1
#8
select count(1) as num
from prod
where available_time > getdate()-update_time
and pro_status=1
这样应该会好点,如果update_time是个定值效果更好.因为索引列在参与算术运算时索引会失效.
#9
重新找人开发
#10
1.先从网站的Cache着手.
2.不给出表结构、索引情况,你的语句很难优化。
2.不给出表结构、索引情况,你的语句很难优化。
#11
你做过哪些索引和视图,请贴上来看看.
总的建议就是把
查询最频繁的表做索引,
把更新最频繁的单独做运算.
比如将available_time ,update_time 做单独的索引
pro_status 如果状态很多也可以单独建索引
另外条件语句
where available_time > getdate()-update_time
也换下位置,利用运算.
看效果是不是好些?
总的建议就是把
查询最频繁的表做索引,
把更新最频繁的单独做运算.
比如将available_time ,update_time 做单独的索引
pro_status 如果状态很多也可以单独建索引
另外条件语句
where available_time > getdate()-update_time
也换下位置,利用运算.
看效果是不是好些?
#12
我看到别人的网站打开速度非常快,只有二秒左右。不知道用的是什么方法或技术。好像还生成的静态面页。
#13
高手们,请顶一下!!!
有没有可以告诉我方法也行呀!!
索引我是用过了,有没有其它技术可以实现。不一定非得用sql200!!
有没有可以告诉我方法也行呀!!
索引我是用过了,有没有其它技术可以实现。不一定非得用sql200!!
#14
1. 页面尽量要静态化。只要能够静态化的地方就一定静态化
2. 适当的索引
3. 如果sql="select count(*) as num from prod where (available_time + update_time > CONVERT(DATETIME, getdate(), 102)) and pro_status=1 "需要很长的时间,那么干脆就不要用它!可以在prod数据表上建立触发器,用来计数符合你上面查询中条件的记录数,病存放到另外一个表里,需要的时候,你直接一个很简单的sql语句就查询出来了。用触发器的目的,就是把负载平均在平时的对prod数据表的insert,delete或update操作上,而不是把运算的负载集中在查询的时候。
4. 优化SQL语句
5. 80w条记录的数据表不算大,一定要树立可以优化的的信心,性能的问题是肯定可以解决的。
2. 适当的索引
3. 如果sql="select count(*) as num from prod where (available_time + update_time > CONVERT(DATETIME, getdate(), 102)) and pro_status=1 "需要很长的时间,那么干脆就不要用它!可以在prod数据表上建立触发器,用来计数符合你上面查询中条件的记录数,病存放到另外一个表里,需要的时候,你直接一个很简单的sql语句就查询出来了。用触发器的目的,就是把负载平均在平时的对prod数据表的insert,delete或update操作上,而不是把运算的负载集中在查询的时候。
4. 优化SQL语句
5. 80w条记录的数据表不算大,一定要树立可以优化的的信心,性能的问题是肯定可以解决的。
#15
14L更正:
病 = 并
#16
谢谢楼上的回复,但我求的是在这个时间以后的记录,用触发器不在现实!!
谢谢!!继续等待中!!!
谢谢!!继续等待中!!!
#17
回帖是一种美德!每天回帖即可获得 10 分可用分!
#18
关注
#19
关注,学习。。。
#20
谢谢大家的回复,我有查一此资料,说用lucene 可以更快些,请各位老大指点!!
#21
跪求!!!
#22
哈哈,看来比较难了!!
各位老大!!学习中!!!
各位老大!!学习中!!!
#23
還是從來好點。2000有點老了。用2008sql
#24
谢谢各位了,虽然没有找到办法!现在结帖!
#1
索引!
#2
谢谢楼上的回复,我做过索引!!
#3
dd
#4
4-6秒查询80万的数据,需要这么时间我觉得是正常的
这么多数据也不算小了,
如果想要更快,你可试一下加索引
create index idx_prod on prod (available_time,update_time )
这么多数据也不算小了,
如果想要更快,你可试一下加索引
create index idx_prod on prod (available_time,update_time )
#5
CONVERT(DATETIME, getdate(), 102) 这里转换无效果吧,等价于getdate()
单键索引
available_time ,update_time
pro_status 如果状态很多也建索引
select count(1) as num from prod where available_time > getdate()-update_time and pro_status=1
试试看哈
#6
贊同.
#7
1. 你先在prod后面加with(nolock) 看看是不是更新太多,以至于查表的时候引起锁等待
如果1不行,那么试试
2.
create view v_test
as
select available_time+update_time as time1,pro_status
from dbo.prod
create index ix_v_test
on test(time1,pro_status)
select count(1) from v_test with(nolock) where time1>CONVERT(DATETIME, getdate(), 102)) and pro_status=1
#8
select count(1) as num
from prod
where available_time > getdate()-update_time
and pro_status=1
这样应该会好点,如果update_time是个定值效果更好.因为索引列在参与算术运算时索引会失效.
#9
重新找人开发
#10
1.先从网站的Cache着手.
2.不给出表结构、索引情况,你的语句很难优化。
2.不给出表结构、索引情况,你的语句很难优化。
#11
你做过哪些索引和视图,请贴上来看看.
总的建议就是把
查询最频繁的表做索引,
把更新最频繁的单独做运算.
比如将available_time ,update_time 做单独的索引
pro_status 如果状态很多也可以单独建索引
另外条件语句
where available_time > getdate()-update_time
也换下位置,利用运算.
看效果是不是好些?
总的建议就是把
查询最频繁的表做索引,
把更新最频繁的单独做运算.
比如将available_time ,update_time 做单独的索引
pro_status 如果状态很多也可以单独建索引
另外条件语句
where available_time > getdate()-update_time
也换下位置,利用运算.
看效果是不是好些?
#12
我看到别人的网站打开速度非常快,只有二秒左右。不知道用的是什么方法或技术。好像还生成的静态面页。
#13
高手们,请顶一下!!!
有没有可以告诉我方法也行呀!!
索引我是用过了,有没有其它技术可以实现。不一定非得用sql200!!
有没有可以告诉我方法也行呀!!
索引我是用过了,有没有其它技术可以实现。不一定非得用sql200!!
#14
1. 页面尽量要静态化。只要能够静态化的地方就一定静态化
2. 适当的索引
3. 如果sql="select count(*) as num from prod where (available_time + update_time > CONVERT(DATETIME, getdate(), 102)) and pro_status=1 "需要很长的时间,那么干脆就不要用它!可以在prod数据表上建立触发器,用来计数符合你上面查询中条件的记录数,病存放到另外一个表里,需要的时候,你直接一个很简单的sql语句就查询出来了。用触发器的目的,就是把负载平均在平时的对prod数据表的insert,delete或update操作上,而不是把运算的负载集中在查询的时候。
4. 优化SQL语句
5. 80w条记录的数据表不算大,一定要树立可以优化的的信心,性能的问题是肯定可以解决的。
2. 适当的索引
3. 如果sql="select count(*) as num from prod where (available_time + update_time > CONVERT(DATETIME, getdate(), 102)) and pro_status=1 "需要很长的时间,那么干脆就不要用它!可以在prod数据表上建立触发器,用来计数符合你上面查询中条件的记录数,病存放到另外一个表里,需要的时候,你直接一个很简单的sql语句就查询出来了。用触发器的目的,就是把负载平均在平时的对prod数据表的insert,delete或update操作上,而不是把运算的负载集中在查询的时候。
4. 优化SQL语句
5. 80w条记录的数据表不算大,一定要树立可以优化的的信心,性能的问题是肯定可以解决的。
#15
14L更正:
病 = 并
#16
谢谢楼上的回复,但我求的是在这个时间以后的记录,用触发器不在现实!!
谢谢!!继续等待中!!!
谢谢!!继续等待中!!!
#17
回帖是一种美德!每天回帖即可获得 10 分可用分!
#18
关注
#19
关注,学习。。。
#20
谢谢大家的回复,我有查一此资料,说用lucene 可以更快些,请各位老大指点!!
#21
跪求!!!
#22
哈哈,看来比较难了!!
各位老大!!学习中!!!
各位老大!!学习中!!!
#23
還是從來好點。2000有點老了。用2008sql
#24
谢谢各位了,虽然没有找到办法!现在结帖!