oracle的SQL为何慢于国产数据库

flzhang 2009-12-21 10:55:28
我想对一条SQL语句进行优化,原来的SQL是这样的

SELECT * FROM item, author WHERE item.i_a_id = author.a_id AND item.i_subject = 'arts' ORDER BY item.i_title limit 50

语意:找出前50本艺术类的书籍(这条SQL的语法是针对国产数据库的)

针对国产数据库优化的SQL
SELECT * FROM ( select * from item where item.i_subject = 'arts' ORDER BY item.i_title limit 50) aa, author WHERE aa.i_a_id = author.a_id

针对ORACLE优化的SQL
SELECT * FROM ( select * from(select * from item where item.i_subject = 'arts' ORDER BY item.i_title) where rownum<51 ) aa, author WHERE aa.i_a_id = author.a_id

在国产数据库和ORACLE上对比优化SQL的查询速度,ORACLE的速度比国产数据库差的比较多,无论是单条语句的执行还是并法测试时,想请大家帮我分析下,针对ORACLE的这种优化方式是不是最佳方式,是不是这种非最佳的优化方式造成ORACLE的查询速度不如国产数据库快呢?
如果有更好的对oracle的优化方式请指教 谢谢了!
...全文
882 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
waterr 2010-10-14
  • 打赏
  • 举报
回复
oracle是大型数据库 稳定,安全性高 数据大量时就可以看出其速度了
小量数据 就用小行数据库就好 access就很方便
cuizhou5876 2010-09-03
  • 打赏
  • 举报
回复
lz用的什么国产的数据库.
Ma Ding 2010-07-18
  • 打赏
  • 举报
回复
up up up
xieyu_zy 2010-07-11
  • 打赏
  • 举报
回复
补充一下,如果通过WHERE返回结果集不太大,适当提高PGA中的SORT_AREA_SIZE的大小可以得到性能提高,因为之所以慢都是因为SORT_AREA_SIZE不够用,导致要到TEMP表空间(磁盘上)去做排序,速度自然就慢下来了。
xieyu_zy 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 qldsrx 的回复:]
楼主你的查询语句就有问题,明显让Oracle跑慢了。


引用
针对ORACLE优化的SQL
SELECT * FROM (select * from item where item.i_subject = 'arts' ORDER BY item.i_title where rownum<=50 ) aa, author WHERE aa.i_a_id = author.a_id
[/Quote]

这种写法是错误的,因为ORACLE的ROWNUM是在ORDER BY以后生成的,如果没有ORDER BY可以这样写,有ORDER BY不行,可以自己拿一些数据做一下测试,按照时间倒序排列,插入的最新的数据未必会排在最前面。

如楼上几楼所说,ORACLE在小数据量上并不占优势,但是他能在全球占有54%的市场,并非没有他的能力,为什么他在小数据量上没有优势,为什么他又这么有优势,在于它的体系结构是非常好,但是由于其复杂性处理,所以在很多小数据量上还不如普通的数据库,就类似判定逻辑多了还不如将程序直接执行下去那样。ORACLE分页方式慢的原因主要有两个:
1、排序,根据结果集较大的排序。
2、结果集返回后,套两层分别定位数据范围,回表查询的量非常大(LZ可以用国产数据库试一试将翻页到第十万条多条上去,而不是查询前50条,这看不出什么效率问题)。

排序上几乎下不了太多动作,只是希望通过WHERE返回回来的数据可以尽量小(设计上),然后WHERE返回数据的速度尽量快(索引或分区的问题),排序(可以和上述字段建立联合索引),只返回ROWID,内层不适用 * 去定位数据(导致回表),通过返回50个ROWID后,回表提取数据(嵌套循环,绝对定位,比索引更快速),如果外部被关联表author的关联字段上也有索引(唯一性最好,不过能快速定位就好),也顺序通过这50条记录,嵌套循环,类似小结果集(50条)驱动大表的索引扫描的过程。
qldsrx 2010-07-05
  • 打赏
  • 举报
回复
楼主你的查询语句就有问题,明显让Oracle跑慢了。

引用
针对ORACLE优化的SQL
SELECT * FROM ( select * from(select * from item where item.i_subject = 'arts' ORDER BY item.i_title) where rownum<51 ) aa, author WHERE aa.i_a_id = author.a_id


改成这样你再去试试,看Oracle到底快不快:
SELECT * FROM (select * from item where item.i_subject = 'arts' ORDER BY item.i_title where rownum<=50 ) aa, author WHERE aa.i_a_id = author.a_id


  • 打赏
  • 举报
回复
爱我中华,爱我数据库
行舟 2010-06-06
  • 打赏
  • 举报
回复
有技术支持什么数据库都可以啊!
zzyzgydotnet 2010-06-06
  • 打赏
  • 举报
回复
楼主说的这个国产数据库是什么?
dingjun123 2010-06-06
  • 打赏
  • 举报
回复
oracle既然烂,用国产的也不错嘛!~
什么大梦的还可以哦!
嘿嘿,不过oracle是国际公认的排在前列的数据库产品,我相信它不烂,只是很多人把它用的很烂
malun666 2010-06-06
  • 打赏
  • 举报
回复
oracle在整体软件结构的稳定性,兼容性,大数据量操作的性能等是国产数据库差距最大的地方。
国产数据库在速度和性能上已经有了很大提高,这是我们必须认同的。但是在稳定性和安全等方面还有很大提高的余地,要支持国产,支持民族品牌,首先我们国人要尊重我们的自主品牌!
yuhongpingimu 2010-06-06
  • 打赏
  • 举报
回复
哈哈。接分
半世码农 2010-06-01
  • 打赏
  • 举报
回复
帮顶
wudishentong 2010-06-01
  • 打赏
  • 举报
回复
不懂,帮顶,学习,蹭分.
iihero_ 2010-05-28
  • 打赏
  • 举报
回复
这么比较的话,我觉得sqlite都挺快的。呵呵。
zhongqq 2010-05-28
  • 打赏
  • 举报
回复
我感觉你的语句产生的数据量很少应该不会需要多少查询时间 ,两个对比也不会有太大差异。 但是索引的处理可能会影响很大,你看看索引的排序方式, 如何和你order by的排序方式相反就会有很大差异。
刘文钊1 2010-05-26
  • 打赏
  • 举报
回复
个人感觉,oracle速度上,稳定些吧,如果数据量大了,他的查询速度也不好下降很多,这样的代价就是,数据少的时候相对的,也不会很快,相对哈。
danfer97 2010-03-09
  • 打赏
  • 举报
回复
帮顶, 拿分
ALLOHA1984 2010-03-08
  • 打赏
  • 举报
回复
数据规模

1、 数据库大小无限制,单个表最大支持2TB或更大。
2、 支持千万条记录的大型数据。官方文档说已经出现40000张表,几亿条记录的应用。 1、 一个数据库文件2TB或更大。但是为了避免性能下降,最好不要超过10G。
2、 最大记录条数,受限于数据库文件的大小。LoadSpace监控数据量统计:添加50个计数器,每个计数器每小时大概产生100K的数据,15天连续监控数据量约为1.8G。
superdanpi 2010-02-19
  • 打赏
  • 举报
回复
explain plan for 上面的sql;做个执行计划分析 就可以看下oracle走是什么执行计划
加载更多回复(22)
Oracle SQL Handler,是专为Oracle数据库开发人员及操作人员精心打造的一款Oracle开发工具(客户端工具)。国产原创,精品奉献,无序列号限制,仅凭使用满意度随意赞助就可永久使用!   Oracle SQL Handler 特点如下: ((1) 跨平台,能运行于平台 Windows(WIN7、WIN8、XP、NT、2000…)、Linux 、Mac OS; (2) 不需要安装Oracle客户端,能直接连接Oracle服务器端; (3) 超智能的SQL编辑器,具有代码跟踪提示功能,极大地提高SQL编辑效率; (4) SELECT语句的查询结果显示在工作表,工作表象Excel表格一样操作,能方便地增加/删除/更新数据并保存。另外,工作表还有单条记录操作、多格式导出、多功能拷贝、数值统计、查找替换等实用功能; (5) 能方便导出 XLS、CSV、INSERT Statement、HTML、XML等多种格式数据; (6) 能运行和调试PL/SQL语句,能精确定位到错误所在的行列位置; (7) 多线程多连接,会话在运行中可以中断,或编辑,或创建新会话; (8) 监控批量SQL语句的运行,在运行中可暂停、更正等; (9) 以缩进的阶梯格式清晰地显示SQL的解释计划; (10)方便操作常用数据字典如表、视图、索引、过程、函数、触发器等(能查看和编辑编译PL/SQL代码); (11)中英文双语界面并能随时切换,个性化界面设置,界面简洁清爽; (12)运行语句“DESC tableName”清晰地显示表的所有逻辑结构信息,包括列信息、所有约束、索引、子表及触发器等; (13)运行语句“SCHEMA objectName”显示表或视图的DDL源码; (14)SQL格式美化,将杂乱的语句美化成缩进的美观格式; (15)连接配置简单,自动重新连接; (16)占用系统资源极少,启动快,连接快,运行快; (17)高效的语句块操作,高亮显示配对括号; (18)功能实用,操作简便    鼠标双击批处理文件 start.bat 即可启动运行
Oracle SQL Handler,是专为 Oracle 数据库开发人员及操作人员精心打造的一款 Oracle 客户端工具: 超智能的SQL编辑器;超方便的表格操作(可以通过修改表格的单元格数据去更新数据 库表);多种格式的数据导出包括 XLS、CSV、INSERT SQL、HTML、XML;中英文双语界面并 能切换;监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端 ;占用系统资源极少;能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS; 多线程多连接。所有这些功能特性在同类工具中表现突出,甚至是本工具独有的! 还有,它能快速显示SQL的解释计划;能运行/调试 PL/SQL 语句;精确的错误定位;高 效的语句块操作;SQL格式美化;连接配置简单;自动重新连接;个性化界面设置;界面简 洁清爽;操作简便;功能实用且全面! 总之,本工具确实 “小巧、实用、方便、高效”,正是 Oralce 数据库开发人员及操作 人员所需要的强有力的工具! 是国产的,很少见吧,用过的人都说非常方便非常实用而且很强大,不逊色于同类的收费软件! 免费的产品, 强大的品质, 您还等什么! 下载网址有: http://www.onlinedown.net/softdown/91179_2.htm http://www.duote.com/soft/17069.html#downsite (请将下载的 ZIP 文件解压到一目录,鼠标双击批处理文件 start.bat 即可启动运行)
Oracle SQL Handler,是专为 Oracle 数据库开发人员及操作人员精心打造的一款 Oracle 客户端工具: 超智能的SQL编辑器;超方便的表格操作(可以通过修改表格的单元格数据去更新数据 库表);多种格式的数据导出包括 XLS、CSV、INSERT SQL、HTML、XML;中英文双语界面并 能切换;监控批量SQL语句的运行(在运行中可暂停、更正);不需要安装 Oracle 客户端 ;占用系统资源极少;能运行于所有的主流平台包括 Windows、Linux 、Unix 及 Mac OS; 多线程多连接。所有这些功能特性在同类工具中表现突出,甚至是本工具独有的! 还有,它能快速显示SQL的解释计划;能运行/调试 PL/SQL 语句;精确的错误定位;高 效的语句块操作;SQL格式美化;连接配置简单;自动重新连接;个性化界面设置;界面简 洁清爽;操作简便;功能实用且全面! 总之,本工具确实 “小巧、实用、方便、高效”,正是 Oralce 数据库开发人员及操作 人员所需要的强有力的工具! 是国产的,很少见吧,用过的人都说非常方便非常实用而且很强大,不逊色于同类的收费软件! 免费的产品, 强大的品质, 您还等什么! 下载网址有: http://www.onlinedown.net/softdown/91179_2.htm http://www.duote.com/soft/17069.html#downsite (请将下载的 ZIP 文件解压到一目录,鼠标双击批处理文件 start.bat 即可启动运行)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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