【发布时间】:2011-10-17 17:12:10
【问题描述】:
我在我的应用程序的一部分中使用了这个语句,它是生成的。 LIKE '%%' 是空的,只是因为没有向它发送搜索参数,所以它会拉入所有结果。
我对整个数据库还是个新手,想知道是否有任何提示可以改进我的陈述?
我确定它看起来很糟糕,但请放轻松!
更新:我主要希望从中获得更好的性能。我已经使用了 DB2 顾问并创建了它说我应该制作的密钥。这对一些人有所帮助,但仍然比我希望的要慢。
谢谢。
SELECT * FROM
(
SELECT rownumber() OVER (ORDER BY pgmajdsc, item) AS ROW_NUM,
line, item, pgmajdsc, manufacturer
FROM
(
SELECT iline AS line, iitem AS item, pgmajdsc, ldesc AS manufacturer
FROM itemmast
LEFT JOIN itemweb on iline=line and iitem=item
JOIN linemst ON iline=lline
LEFT JOIN custord ON opline=iline AND opitem=iitem AND opcust='1234'
LEFT JOIN cartwdtl ON cwline=iline and cwitem=iitem and cwusr='foo' AND cwcust='1234'
LEFT JOIN itematr ON iline=ialine AND iitem=iaitem
LEFT JOIN prodgrp ON iaclass=pgclass
WHERE ico = 01
AND iecomm = 'Y'
AND (UPPER(ITEMDESC) LIKE '%%' OR UPPER(PRODDESC) LIKE '%%' OR
LINE LIKE '%%' OR UPPER(MFGNAME) LIKE '%%' OR ITEM LIKE '%%' OR
PRODNAME LIKE '%%' OR IDESC1 LIKE '%%' OR IDESC2 LIKE '%%' OR
IMFGNO LIKE '%%' OR IITEM LIKE '%%')
) AS TEMP
) AS ROW_NUM
WHERE ROW_NUM BETWEEN 0 AND 25
ORDER BY pgmajdsc, item
【问题讨论】:
-
除了格式化还有什么想改进的?
-
您可以尝试将其分成不同的行,以便更好地阅读:D
-
@Bead 不用说,您应该重新格式化这个查询,以便人类和 DB2 的解析器都能解释它。不过,除此之外,您还需要重新表述这个问题,以便它提出一个特定问题。目前尚不清楚您要回答什么。
-
LIKE '%%' 是全表扫描...这会在大表上杀死你。
-
要么改变功能,所以它只是一个尾随的'%',或者考虑实现某种类型的全文搜索......这不是微不足道的。但是,我更担心看起来像 SQL 注入漏洞的东西。构建并调用此查询的代码是什么?
标签: sql db2 query-optimization