一个奇怪的查询速度问题??在线等待! 都穷的只剩这100分了 大家帮帮忙!

dihai2000 2003-01-08 02:39:45
我想问一下 在SELECT 语句查询中 到底是加上了条件WHERE快
还是什么条件也不加的快 我想的是 如果加上了条件
譬如 WHERE ITEM.ITEM='0001'的话 那他在SELECT时不仅得选出来数据
还得一个一个和0001对比是否相等 不知是否是这样?
小弟的一个表ITEM很大 大约有136万行 字段也很多
当我要查询时 速度会很慢
假设两个表是ITEM, 里面有很多字段
select ITEM.a,ITEM.b…………ITEM.ITEM from ITEM where ITEM='0001'
如果这样查的话每一行数据都会查询,数据量太大 速度会很慢
且一次性会选出很多列 我想这也许就是速度慢的原因
所以我想这样 先筛选出满足条件的 可是却实现不了
最近看公司另外一个人编的 他的方法是
创建一个新的临时表 譬如 TEMP_ITEM
然后先查询 SLEECT ITEM FROM ITEM where ITEM='0001'
只查一列速度会快很多
然后用 INSERT TEMP_ITEM (a,b,…………) SELECT ITEM.a,ITEM.b…………
FROM ITEM GROUP a,b,…………
不带任何条件的
最后在查寻时就可以 SELECT ITEM.a,ITEM.b………… FROM TEMP_ITEM
WHERE 此时再加上条件
我个人觉得这样子烦,但是领导说这样做好 我都不知道怎么办好了
大家帮我分析一下 该如何是好呢?我是用ASP 而且不建索引和视图
因为公司领导不批准 除此之外还有别的办法吗?
...全文
16 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartwing 2003-01-09
  • 打赏
  • 举报
回复
能把你的问题写清楚一点吗? 最后在查寻时就可以 SELECT ITEM.a,ITEM.b………… FROM TEMP_ITEM 这样能查出你想要的
select ITEM.a,ITEM.b…………ITEM.ITEM from ITEM where ITEM='0001'
信息吗?
g_blue 2003-01-08
  • 打赏
  • 举报
回复
什么东西的使用都是相对的啊,有什么好说的呢 :)

索引的使用效果不仅仅依赖于优化策略,在相当程度上也依赖于应用程序的设计。怎样正确地使用索引,不能一概而论,究竟是让索引满足程序设计的需要,或是程序设计遵循已建立的索引,这两者是相符相承的。只有正确地使索引与程序结合起来,才能产生最佳的优化方案。

  建立索引的目地是为了优化检索速度,如果检索所需要的时间过长,便有理由怀疑是否索引不存在或者优化器没有使用索引。尚若是索引不存在,那么就要取决于用户是否愿意用空间来换取时间,使用索引来解决检索速度慢的问题。如果优化器未使用表上已有的索引,那么要分析为什么,很可能是由于表上有太多的索引需要维护,从而浪费了时间。

随着应用系统的运行,数据不断地发生变化,当数据变化达到某一个程度时将会影响到索引的使用。一种方法是删除老的索引,重新建新的索引。另外一种方法是保持索引统计有效。
beckhambobo 2003-01-08
  • 打赏
  • 举报
回复
select index_name from all_indexes where owner='用户名'
VCBoyGirl 2003-01-08
  • 打赏
  • 举报
回复
Oracle 中查看所有已经建了的索引的命令是:
select * from ind

如有索引,当然有where语句也要看情况。
如果是索引列 = 快于 <> ,所以如果是 <> 可转化为 > and < 来做速度会快很多。
如果有 or 条件最好转换为 union 来查,这样速度也可大大提高。
beckhambobo 2003-01-08
  • 打赏
  • 举报
回复
建义老总给你权限,现在只在sql语句优化,一点都不实际.

要是静态编译了的语句,那效果可想而知!
dihai2000 2003-01-08
  • 打赏
  • 举报
回复
Oracle 中查看所有已经建了的索引的命令是什么?
dihai2000 2003-01-08
  • 打赏
  • 举报
回复
select,update,delete 语句中的子查询应当有规律地查找少于20%的表行.如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高.

索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除.表释放的空间可以再用,而索引释放的空间却不能再用.
wanghai 2003-01-08
  • 打赏
  • 举报
回复
没有索引,全表扫描会快就怪了
建议经常包括在WHERE子句里的列建索引
dihai2000 2003-01-08
  • 打赏
  • 举报
回复
ntchengl 说的有道理 不是建了索引速度就一定快的
ntchengl 2003-01-08
  • 打赏
  • 举报
回复
也不是说建了索引就一定快的:
如果item = '0001'的比例超过了5%,索引就不见的快了,如果低于1%,速度是绝对明显的
索引有利于快速定位
g_blue 2003-01-08
  • 打赏
  • 举报
回复
那是因为你没有使用索引的缘故,所以慢
你在建库的时候为表加上索引,然后在查询时,在WHERE里使用它,即可 :)

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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