代码之家  ›  专栏  ›  技术社区  ›  idiotgenius

Oracle 10性能问题,带有select*from

  •  2
  • idiotgenius  · 技术社区  · 14 年前

    SQL: select * from user_info where userid='1100907' and status='1'

    userid被编入索引,表的行数少于10000,并且有一个lob列。

    SQL需要1秒钟(我是通过在sqlplus中使用“set timing on”得到的)。我试图用所有列的名称替换*,但仍然是1秒。删除lob列后,SQL需要0.99秒。当我将列数减少一半时,时间也会减少一半。

    最后, select userid from user_info where userid='1100907' and status='1' 需要0.01秒。

    有人能搞清楚吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   APC    14 年前

    记住,“挂钟性能测试”是不可靠的。它受环境数据库条件的影响,并且—当输出到SQL*PLUS时—取决于实际显示数据所需的时间。这或许可以解释为什么选择一半的列确实会对运行时间产生如此大的影响。这个表有多少列?

    调整从解释计划开始。这个工具将向您展示数据库将如何执行您的查询。 Find out more .

    例如,为这个查询提供服务更快

    select userid from user_info
    

    然后这一个

    select * from user_info
    

    因为数据库可以满足第一个查询,其中包含来自userid索引的信息,而不需要接触表。

    编辑

    “你能告诉我为什么要用sqlplus打印吗? 列名很多次其他 而不仅仅是返回结果”

    这与分页有关。SQL 每当它抛出一个页面时,PLUS都会重复列标题。您可以使用以下任一SQL来抑制这种行为 加命令:

    set heading off
    

    set pages n  
    

    在第二种情况下,使 n 非常大(例如2000)或零。

        2
  •  0
  •   user359040    14 年前

    也许在用户信息表中有100列?如果是这样,那么查询中实际需要多少列?