我想对一条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的优化方式请指教 谢谢了!
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的优化方式请指教 谢谢了!
解决方案 »
- INS 300-60 Check for group existence failed
- 帮帮忙 Oracle数据库运行一段时间后 响应特别慢 大家看看是什么原因导致的 向大家讨些经验 (一定结贴)
- 急求ORACLE DBA解答 感激不尽!
- 请教个sqlldr 使用direct选项的问题!
- Oracle 10g 并行处理问题
- 一个比较简单的sql问题
- oracle备份脚本的问题 急!急!急!急!急!急!急!急!急!
- 在oracle中能不删除表中数据改变字段的类型吗?急啊,各位大虾,帮帮忙!
- (急) 排序问题,Help me
- 哪里能够查看ORACLE BIEE支持的最大并发连接数
- 怎么修改已经建好的表中某一列的TITLE内容
- oracle10g在安装过程中出现ORA-12638错误
from (select item.i_title ,row_number()over (patition by item.i_title order by item.i_title as rn
from item, author WHERE item.i_a_id = author.a_id AND item.i_subject = 'art)
where rn <51
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慢,但优化的思路都是先找出50条记录在做表连接,为什么ORACLE会差很多呢?
oracle的优势应该在于整体的解决方案,完整的产品系列和强大的技术背景,这也是好多小型DB能有一定市场的原因
建议蹭分!哈哈
另外,oracle的稳定性是其他数据库所不能比拟的。
2、 支持千万条记录的大型数据。官方文档说已经出现40000张表,几亿条记录的应用。 1、 一个数据库文件2TB或更大。但是为了避免性能下降,最好不要超过10G。
2、 最大记录条数,受限于数据库文件的大小。LoadSpace监控数据量统计:添加50个计数器,每个计数器每小时大概产生100K的数据,15天连续监控数据量约为1.8G。
国产数据库在速度和性能上已经有了很大提高,这是我们必须认同的。但是在稳定性和安全等方面还有很大提高的余地,要支持国产,支持民族品牌,首先我们国人要尊重我们的自主品牌!
什么大梦的还可以哦!
嘿嘿,不过oracle是国际公认的排在前列的数据库产品,我相信它不烂,只是很多人把它用的很烂
改成这样你再去试试,看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
这种写法是错误的,因为ORACLE的ROWNUM是在ORDER BY以后生成的,如果没有ORDER BY可以这样写,有ORDER BY不行,可以自己拿一些数据做一下测试,按照时间倒序排列,插入的最新的数据未必会排在最前面。如楼上几楼所说,ORACLE在小数据量上并不占优势,但是他能在全球占有54%的市场,并非没有他的能力,为什么他在小数据量上没有优势,为什么他又这么有优势,在于它的体系结构是非常好,但是由于其复杂性处理,所以在很多小数据量上还不如普通的数据库,就类似判定逻辑多了还不如将程序直接执行下去那样。ORACLE分页方式慢的原因主要有两个:
1、排序,根据结果集较大的排序。
2、结果集返回后,套两层分别定位数据范围,回表查询的量非常大(LZ可以用国产数据库试一试将翻页到第十万条多条上去,而不是查询前50条,这看不出什么效率问题)。排序上几乎下不了太多动作,只是希望通过WHERE返回回来的数据可以尽量小(设计上),然后WHERE返回数据的速度尽量快(索引或分区的问题),排序(可以和上述字段建立联合索引),只返回ROWID,内层不适用 * 去定位数据(导致回表),通过返回50个ROWID后,回表提取数据(嵌套循环,绝对定位,比索引更快速),如果外部被关联表author的关联字段上也有索引(唯一性最好,不过能快速定位就好),也顺序通过这50条记录,嵌套循环,类似小结果集(50条)驱动大表的索引扫描的过程。
小量数据 就用小行数据库就好 access就很方便