Скажем, у меня есть таблица базы данных T с 4 полями, A, B, C и D. A, B и C являются первичными ключами. Для любой комбинации [A, B] всегда есть строка, где C == spaces
. Там могут быть или не быть другие строки, где C != spaces
. У меня есть запрос, который получает все строки, где [A, B] == [in_a, in_b]
, а также где C == in_c
, если такая строка существует, или C == spaces
, если строка in_c не существует. Итак, если есть строка, которая соответствует определенному значению C, я хочу эту, в противном случае я хочу пробелы один. Очень важно, чтобы при наличии подходящей строки в Си мне не возвращались пробелы вместе с ней.
У меня есть рабочий запрос, но он не очень быстрый. Это выполняется в DB2 для z / OS. У меня есть полный контроль над этими таблицами, поэтому я могу при необходимости определить новые признаки. Единственный индекс в таблице на данный момент - это [A, B, C]
, первичный ключ. Этот SQL довольно грязный, и я считаю, что есть лучший способ выполнить эту задачу. Что я могу сделать, чтобы сделать этот запрос быстрее?
У меня сейчас есть запрос:
SELECT A, B, C, D FROM T
WHERE A = :IN_A AND B > :IN_B AND
(C = :IN_C
OR (NOT EXISTS(
SELECT B FROM T WHERE
A = :IN_A AND B > :IN_B AND C = :IN_C))
AND C = " ");