有一个web日志库,用query1取其中一段时间的IP数据(约150万行),然后遍历query1,执行目标查询query2(目标IP库就2000多行),查到recordcound>0即插入临时表,结果也就查到100多条。执行前10万行查询也就花了10分钟左右,但后来越来越慢,全部执行完居然花了14小时多!
请问怎样可以提高这一系列操作的执行效率?
请问怎样可以提高这一系列操作的执行效率?
解决方案 »
- 【CSDN开心辞典】水分(非技术分)最多的ID是谁?
- 用什么方法写入数据库量快?
- 调用WebService出错:"Server was unable to process request-->Object reference not set to an instance of an Object"是什么错误?
- 谁愿意做我的老师,我很郁闷!!
- ADOQUERY 运行SQL语句的问题
- 如何屏蔽鼠标按键
- 我要几个报表在一张纸上输出,该怎么办?
- 谁在开发Web Application 的程序? for delphi 6.0 ,Webnap?
- 数据库中数据的数量
- 问一个ActiveForm的问题
- 记录上下移动问题,请指点一二,TKS!
- 那里有提供中文说明的WEB服务?
按照10分钟执行10w次查询来算,150w也就2小时半够了,缘何最终花了14小时?!
一般来说是从减少全表扫描(就是建索引)和减少记录(就是优化SQL语句)来解决的
你是想要迁就谁呢?谁代价高就听谁的你为什么要转换数据库字段的值而不去转换目标IP表的IP为字符串呢逆向啊
1、web表十分巨大,会否对插入造成影响
2、用以下sql获取date1-date2之间的在目标IP范围内的记录,能否有效用到索引
select a.ip,b.country from web日志 as a,目标IP as b where a.date>=date1 and a.date<=date2 and a.ip>=b.ip1 and a.ip<=b.ip2
from web日志 as a
where a.date>=date1 and a.date <=date2 and a.IP in --按字符串,有用索引
(
select 转成字符串(b.IP) --因为偶不知道你用的是什么DB,就这样写
from 目标IP as b
where b.ip>ip1 and b.ip<ip2 --按数字,有用索引
)
b表的结构是这样地:
IP1:起始IP
IP2:结束IP
country:地区