12
返回列表 发新帖
楼主: whzhaha

一条SQL困扰我很久了,大大们帮我分析下,怎么优化!

[复制链接]
论坛徽章:
86
2015中国数据库技术大会纪念徽章
日期:2015-04-24 16:04:24马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11优秀写手
日期:2013-12-18 09:29:11日产
日期:2013-10-17 08:44:39马自达
日期:2013-08-26 16:28:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-23 16:55:51马上有房
日期:2014-02-19 11:55:14
11#
发表于 2010-10-18 10:39 | 只看该作者
把INDEX(end_heap ,start_heap)拆开建两个索引试试

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
12#
发表于 2010-10-18 10:40 | 只看该作者
把计划贴下,先set serveroutput off,然后按Yong Huang 的办法贴计划

我觉得慢在join,先调整那join先,你的子查询只有1000条记录,排序慢不到哪去啊

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2010-10-18 10:56 | 只看该作者
看执行计划没什么意义了吧 ,那种方式执行计划确实看不了,PL/sql附件传下

11.rar

343.41 KB, 下载次数: 10

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2010-10-18 11:03 | 只看该作者
其实我现在觉得只有两种可能  一是数据量多点时 distance计算比较慢,随即不用算,但是我随机去20条也还好
2.就是筛选数据放硬盘排序了  我一直怀疑后者
干脆我把函数也发下

CREATE OR REPLACE FUNCTION distance(lat1 NUMBER,lon1 NUMBER,lat2 NUMBER,lon2 NUMBER)
RETURN NUMBER IS
   num NUMBER;
   PI  NUMBER;
BEGIN
  PI := 3.141592625;
  num:=2 * 6378.137* ASIN(SQRT(power(SIN(PI * (lat1 - lat2) / 360), 2)
   +COS(PI * lat1 / 180)* COS(lat2* PI / 180) * power(SIN(PI * (lon1 - lon2) / 360), 2)));
RETURN ROUND(num*1000);
END;

使用道具 举报

回复
论坛徽章:
0
15#
 楼主| 发表于 2010-10-18 13:47 | 只看该作者
有个新发现 原来我系统是MYSQL下的,由于想提升点性能,就这次迁移到ORACLE上来了,同一一个函数,同样多数据
select h.lat,h.lon,h.station_id stationId from busstation  h  where distance(30.002,120.1123,h.lat,h.lon)<=11500
oracle需要100秒
MYSQL下才0.11秒悲剧了。ORACLE自定义函数性能也太差了吧,现在也不知道怎么弄了 NND

使用道具 举报

回复
论坛徽章:
47
蒙奇·D·路飞
日期:2017-03-27 08:04:23马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11一汽
日期:2013-09-01 20:46:27复活蛋
日期:2013-03-13 07:55:232013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:322012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20
16#
发表于 2010-10-18 23:52 | 只看该作者
whzhaha,

dingjun123 said twice you need to run "set serveroutput off" in sqlplus before you run the SQLs I provided in msg #3. You must have enabled serveroutput on somewhere, perhaps in glogin.sql. I didn't tell you to turn it off because people normally don't do that.

Before you run your good and bad SQLs, flush buffer cache (hope it won't affect other apps too much):
alter system flush buffer_cache;
That way, we can compare disk read numbers.

You can just attach a text file instead of an image. Or just show it on the web page if you know how to post with fixed-width font such as courier.

> select h.lat,h.lon,h.station_id stationId from busstation  h  where distance(30.002,120.1123,h.lat,h.lon)<=11500
> oracle需要100秒
> MYSQL下才0.11秒。

On Oracle, do you see a lot of disk activity and on MySQL, very little? If that's not the case, is CPU usage high on Oracle? There could be two causes, disk reads and CPU computation. I want to see which of the two plays the major role. If it's disk, what's Oracle's db_cache_size and pga_aggregate_target_size? If it's CPU, what are the CPU speeds on both machines?

Yong Huang

使用道具 举报

回复
论坛徽章:
0
17#
 楼主| 发表于 2010-10-19 00:39 | 只看该作者
thinks very much,Yong Huang.
我尝试了不去计算distance,效率很快,那么现在基本问题确认是自定义函数导致性能问题,MySQL和oracle服务器都是普通的开发机器,MYSQL还是在WINDOWS下,oracle在LUNIX下,两者配置差不多。
我明天去具体看看具体参数,至于db_cache_size 和pga_aggregate_target_size我是默认安装后就没改过。明天尝试修改下看看。
我找了些资料,还有尝试写些其他函数在ORACLE和MYSQL里对比下,性能确实有很大差别,ORACLE对用户定义函数性能很差,但它自身的系统函数性能还不错的,也可能是我ORACLE系统参数配置问题,我明天把db_cache_size 和pga_aggregate_target_size参数修改执行下,看看有没效果,看来ORACLE定义函数用到查询中还是要慎重,我这里是必须要用数据库处理,不然的话应该拿到应运中去处理计算的而不是依赖数据库。

[ 本帖最后由 whzhaha 于 2010-10-19 00:43 编辑 ]

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表