【问题标题】:Improve performance of the SQL query (DB2)提高 SQL 查询的性能 (DB2)
【发布时间】:2013-04-12 08:54:14
【问题描述】:

我需要获取符合特定条件的记录的文件名,但我意识到执行时查询非常慢。我已经加了index,但是还是很慢,怎么提高性能???我正在使用 DB2。请帮忙,谢谢。

表格(文件)(数据量 - 约 100000)

  • FILE_ID
  • 姓名
  • 类别

索引(类别,文件 ID)

表(记录)(数据量 - 约 50000000)

  • RECORD_ID
  • 数据
  • 创建日期
  • 类型
  • FILE_ID

索引(创建日期,类型,文件 ID)

SELECT NAME 
FROM FILE
WHERE CATEGORY = ? AND 
      FILE_ID IN (SELECT FILE_ID FROM RECORD WHERE CREATE_DATE = ? AND TYPE = ? )

【问题讨论】:

  • IN 比 EXISTS 慢,尝试使用 EXISTS
  • 您好,我测试了一些案例,发现 IN 的性能似乎比 EXISTS 好。这只是我检查查询的访问计划时发现的结果。无论如何,只是想分享我的发现。

标签: sql performance indexing db2


【解决方案1】:

您可能会发现将“表文件”放入带有 where 子句的临时表会加快速度...

例如...

创建一个临时表,然后插入表文件“Where Cateogry =?”中的所有记录然后将该表加入记录

【讨论】:

    【解决方案2】:

    加入应该可以解决您的问题。

    有时您还需要重组 (REORG) 表和索引以提高慢查询的性能。

    【讨论】:

    • 谢谢,重组确实提高了性能。
    【解决方案3】:

    这不会给你重复的结果

    SELECT NAME 
    FROM FILE F
    JOIN (
        SELECT FILE_ID FROM RECORD WHERE CREATE_DATE = ? AND TYPE = ? 
        GROUP BY FILE_ID
    ) Q ON F.FILE_ID = Q.FILE_ID
    WHERE CATEGORY = ?
    

    【讨论】:

      【解决方案4】:

      试试INNER JOIN语法:

      select file.name
          from file inner join record using(file_id)
      where file.category_id=? and record.create_date=? and record.type=?
      

      记录表的索引(file_id,create_date,type)。

      【讨论】:

        【解决方案5】:

        加入表格。

        select f.name
        from f join record r on f.file_id = r.file_id
        where f.category = ?
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-26
          • 1970-01-01
          • 2016-09-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多