āĻŦāĻžāĻĢāĻžāĻ° āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ¸ā§ āĻāĻŽāĻ¨ āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨ āĻĨā§āĻā§ āĻ¸āĻ¤āĻ°ā§āĻ āĻĨāĻžāĻā§āĻ¨...
āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻāĻāĻŋ āĻā§āĻ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻ¸ā§āĻ¨ PostgreSQL-āĻ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻāĻŋāĻā§ āĻ¸āĻžāĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻĒāĻ¨ā§āĻĨāĻž āĻĻā§āĻāĻŋāĨ¤ āĻāĻĒāĻ¨āĻŋ āĻāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§āĻ¨ āĻŦāĻž āĻ¨āĻž āĻāĻ°āĻŦā§āĻ¨ āĻ¤āĻž āĻāĻĒāĻ¨āĻžāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§, āĻ¤āĻŦā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻžāĻ¨āĻž āĻŽā§āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨āĨ¤
PG-āĻāĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻāĻŋāĻā§ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ āĻāĻ°āĻ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻ āĻšāĻ¯āĻŧā§ āĻāĻ āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ 9.4/9.6-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻāĻ āĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻ¯āĻŧ, āĻ¯ā§āĻŽāĻ¨āĻāĻŋ āĻāĻāĻžāĻ¨ā§ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤
āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻā§āĻŦ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻž āĻ¯āĻžāĻ:
SELECT
TRUE
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅ" d
INNER JOIN
"ĐĐžĐēŅĐŧĐĩĐŊŅĐ Đ°ŅŅиŅĐĩĐŊиĐĩ" doc_ex
USING("@ĐĐžĐēŅĐŧĐĩĐŊŅ")
INNER JOIN
"ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" t_doc ON
t_doc."@ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" = d."ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°"
WHERE
(d."ĐиŅĐž3" = 19091 or d."ĐĄĐžŅŅŅĐ´ĐŊиĐē" = 19091) AND
d."$ЧĐĩŅĐŊОвиĐē" IS NULL AND
d."ĐŖĐ´Đ°ĐģĐĩĐŊ" IS NOT TRUE AND
doc_ex."ĐĄĐžŅŅĐžŅĐŊиĐĩ"[1] IS TRUE AND
t_doc."ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" = 'ĐĐģĐ°ĐŊРайОŅ'
LIMIT 1;
āĻā§āĻŦāĻŋāĻ˛ āĻāĻŦāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻ¨āĻžāĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĻā§āĻˇā§āĻ¤ā§āĻ° āĻāĻŦāĻ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° "āĻ°āĻžāĻļāĻŋāĻ¯āĻŧāĻžāĻ¨" āĻ¨āĻžāĻŽāĻā§āĻ˛āĻŋāĻā§ āĻāĻŋāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ¸ā§āĻŦāĻžāĻĻā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĨ¤ āĻāĻžāĻ°āĻ¨
āĻāĻ˛ā§āĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻ¤āĻžāĻāĻžāĻ¨:
144ms āĻāĻŦāĻ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 53K āĻŦāĻžāĻĢāĻžāĻ° - āĻ āĻ°ā§āĻĨāĻžā§ 400MB āĻāĻ° āĻŦā§āĻļāĻŋ āĻĄāĻžāĻāĻž! āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻāĻžāĻā§āĻ¯āĻŦāĻžāĻ¨ āĻšāĻŦ āĻ¯āĻĻāĻŋ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻ¯āĻžāĻļā§ āĻĨāĻžāĻā§, āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻĄāĻŋāĻ¸ā§āĻ āĻĨā§āĻā§ āĻĒāĻĄāĻŧāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ āĻ¨ā§āĻ āĻŦā§āĻļāĻŋ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻāĻŦā§āĨ¤
āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ!
āĻā§āĻ¨ā§āĻāĻžāĻŦā§ āĻā§āĻ¨ā§ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻŦā§āĻāĻ¤ā§ āĻšāĻŦā§ āĻāĻāĻŋ āĻā§ āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤
āĻāĻāĻ¨ āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§āĻ° āĻ¸ā§āĻ¯ā§āĻā§āĻ° āĻŦāĻžāĻāĻ°ā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻŦāĻŋāĻāĻžāĻļāĻā§ āĻā§āĻĄāĻŧā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ āĻāĻŦāĻ āĻ¸āĻŽā§āĻŽāĻ¤ āĻšāĻ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§āĻ˛āĻāĻāĻžāĻŦā§ "āĻ¸āĻ¸ā§āĻ¤āĻž" āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛āĻŋāĻā§āĻ¨ āĻāĻŦāĻ/āĻ
āĻĨāĻŦāĻž āĻŦā§āĻ¸ āĻ¸āĻŽā§āĻŽā§āĻā§āĻ° āĻāĻŋāĻā§ āĻāĻŋāĻ¨āĻŋāĻ¸ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ°ā§āĻ˛ āĻ¸ā§āĻāĻāĻā§āĻ˛āĻŋ.
āĻ¤āĻžāĻ āĻ
āĻ¨ā§āĻ°ā§āĻ§:
- āĻ
āĻ¨ā§āĻ¤āĻ¤ āĻāĻŋāĻā§ āĻ¨āĻĨāĻŋāĻ° āĻ
āĻ¸ā§āĻ¤āĻŋāĻ¤ā§āĻŦ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§
- āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ§āĻ°āĻ¨ā§āĻ°
- āĻ¯ā§āĻāĻžāĻ¨ā§ āĻ˛ā§āĻāĻ āĻŦāĻž āĻ
āĻāĻŋāĻ¨āĻ¯āĻŧāĻāĻžāĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŽāĻ¨ āĻāĻ°ā§āĻŽāĻāĻžāĻ°ā§
JOIN + LIMIT 1
āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻāĻāĻ¨ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§āĻ° āĻĒāĻā§āĻˇā§ āĻāĻāĻāĻŋ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻ¸āĻšāĻ āĻšāĻ¯āĻŧ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻĒā§āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻ āĻā§āĻŦāĻŋāĻ˛ āĻ¯ā§āĻā§āĻ¤ āĻšāĻ¯āĻŧ, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻ¸ā§āĻ āĻĨā§āĻā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ
āĻŦāĻļāĻŋāĻˇā§āĻ āĻĨāĻžāĻā§āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻšāĻ āĻŽāĻžāĻ¨ā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°āĻ āĻĻāĻā§āĻˇ āĻ¨āĻ¯āĻŧāĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 3 āĻāĻŋ āĻā§āĻŦāĻŋāĻ˛ āĻāĻŋāĻ˛ - āĻāĻŦāĻ āĻāĻ° āĻĒā§āĻ°āĻāĻžāĻŦ āĻā§ ...
āĻāĻ¸ā§āĻ¨ āĻĒā§āĻ°āĻĨāĻŽā§ "āĻĄāĻā§āĻŽā§āĻ¨ā§āĻ āĻāĻžāĻāĻĒ" āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻ āĻĨā§āĻā§ āĻŽā§āĻā§āĻ¤āĻŋ āĻĒāĻžāĻ¨ āĻāĻŦāĻ āĻāĻāĻ āĻ¸āĻžāĻĨā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸āĻā§ āĻŦāĻ˛ā§āĻ¨ āĻ¯ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻāĻĒ āĻ°ā§āĻāĻ°ā§āĻĄ āĻ āĻ¨āĻ¨ā§āĻ¯ (āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻāĻžāĻ¨āĻŋ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻļāĻŋāĻĄāĻŋāĻāĻ˛āĻžāĻ°ā§āĻ° āĻāĻāĻ¨āĻ āĻā§āĻ¨ āĻ§āĻžāĻ°āĻŖāĻž āĻ¨ā§āĻ):
WITH T AS (
SELECT
"@ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°"
FROM
"ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°"
WHERE
"ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" = 'ĐĐģĐ°ĐŊРайОŅ'
LIMIT 1
)
...
WHERE
d."ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" = (TABLE T)
...
āĻšā§āĻ¯āĻžāĻ, āĻ¯āĻĻāĻŋ āĻā§āĻŦāĻŋāĻ˛/CTE āĻāĻāĻāĻŋ āĻāĻāĻ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻāĻāĻāĻŋ āĻāĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ PG-āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻāĻāĻžāĻŦā§ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
d."ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" = (SELECT "@ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" FROM T LIMIT 1)
PostgreSQL āĻĒā§āĻ°āĻļā§āĻ¨ā§ āĻ āĻ˛āĻ¸ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨
BitmapOr āĻŦāĻ¨āĻžāĻŽ UNION
āĻāĻŋāĻā§ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, āĻŦāĻŋāĻāĻŽā§āĻ¯āĻžāĻĒ āĻšāĻŋāĻĒ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻ
āĻ¨ā§āĻ āĻāĻ°āĻ āĻāĻ°āĻŦā§ - āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§, āĻ¯āĻāĻ¨ āĻ
āĻ¨ā§āĻ āĻ°ā§āĻāĻ°ā§āĻĄ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻļāĻ°ā§āĻ¤ āĻĒā§āĻ°āĻŖ āĻāĻ°ā§āĨ¤ āĻāĻŽāĻ°āĻž āĻāĻāĻž āĻĒā§āĻ¯āĻŧā§āĻāĻŋ āĻāĻžāĻ°āĻŖ āĻŦāĻž āĻļāĻ°ā§āĻ¤ BitmapOr āĻ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧā§āĻā§- āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻžāĻ¯āĻŧ āĻ
āĻĒāĻžāĻ°ā§āĻļāĻ¨āĨ¤
āĻāĻ¸ā§āĻ¨ āĻŽā§āĻ˛ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°ā§ āĻāĻ¸āĻŋ - āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻāĻāĻāĻŋ āĻ°ā§āĻāĻ°ā§āĻĄ āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§ āĻāĻžāĻ°āĻ āĻāĻžāĻā§ āĻļāĻ°ā§āĻ¤ āĻĨā§āĻā§ - āĻ
āĻ°ā§āĻĨāĻžā§, āĻāĻāĻ¯āĻŧ āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻ
āĻ§ā§āĻ¨ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ 59K āĻ°ā§āĻāĻ°ā§āĻĄ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻāĨ¤ āĻāĻāĻāĻŋ āĻļāĻ°ā§āĻ¤ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻāĻāĻŋ āĻāĻĒāĻžāĻ¯āĻŧ āĻāĻā§, āĻāĻŦāĻ āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋāĻ¤ā§ āĻ¯āĻāĻ¨ āĻāĻŋāĻā§āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ āĻ¤āĻāĻ¨āĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋāĻ¤ā§ āĻ¯āĻžāĻ¨. āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻ¨āĻāĻļāĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°āĻŦā§:
(
SELECT
...
LIMIT 1
)
UNION ALL
(
SELECT
...
LIMIT 1
)
LIMIT 1
"āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ" āĻ¸ā§āĻŽāĻž 1 āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°ā§ āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻ°ā§āĻāĻ°ā§āĻĄāĻāĻŋ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻā§āĻ˛ā§ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻļā§āĻˇ āĻšāĻ¯āĻŧā§ˇ āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻŦā§āĻ˛āĻā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻŦā§ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻŦā§āĻ˛āĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻŦā§ āĻ¨āĻž (āĻŽā§āĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§)āĨ¤
"āĻā§āĻ¸ā§āĻ° āĻ āĻ§ā§āĻ¨ā§ āĻāĻ āĻŋāĻ¨ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ˛ā§āĻāĻŋāĻ¯āĻŧā§ āĻ°āĻžāĻāĻž"
āĻŽā§āĻ˛ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻ
āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ
āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻ°āĻ¯āĻŧā§āĻā§ - āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻ¸āĻžāĻ°āĻŖā§ "āĻĄāĻā§āĻŽā§āĻ¨ā§āĻ āĻāĻā§āĻ¸āĻā§āĻ¨āĻļāĻ¨" āĻāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĨ¤ āĻ
āĻāĻŋāĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻ¤ā§ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻ¸āĻ¤ā§āĻ¯āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻļā§āĻˇā§ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, d. "āĻŽā§āĻā§ āĻĢā§āĻ˛āĻž āĻšāĻ¯āĻŧā§āĻā§" āĻ¸āĻ¤ā§āĻ¯ āĻ¨āĻ¯āĻŧā§ˇ), āĻāĻ āĻ¸āĻāĻ¯ā§āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻĻāĻž āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻšāĻ¯āĻŧ āĻāĻŦāĻ "āĻ¸āĻŽā§āĻĒāĻĻ āĻŦā§āĻ¯āĻ¯āĻŧ āĻāĻ°ā§"āĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻāĻŽ āĻŦāĻž āĻŦā§āĻļāĻŋ āĻŦā§āĻ¯āĻ¯āĻŧ āĻāĻ°āĻž āĻšāĻŦā§ - āĻāĻ āĻā§āĻŦāĻŋāĻ˛ā§āĻ° āĻāĻāĻžāĻ°ā§āĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§āĨ¤
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯āĻžāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻāĻŋāĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻāĻ¨āĻ āĻāĻā§ āĻ¯āĻāĻ¨ āĻāĻāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻšāĻ¯āĻŧ:
SELECT
...
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅ" d
WHERE
... /*index cond*/ AND
CASE
WHEN "$ЧĐĩŅĐŊОвиĐē" IS NULL AND "ĐŖĐ´Đ°ĐģĐĩĐŊ" IS NOT TRUE THEN (
SELECT
"ĐĄĐžŅŅĐžŅĐŊиĐĩ"[1] IS TRUE
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅĐ Đ°ŅŅиŅĐĩĐŊиĐĩ"
WHERE
"@ĐĐžĐēŅĐŧĐĩĐŊŅ" = d."@ĐĐžĐēŅĐŧĐĩĐŊŅ"
)
END
āĻāĻāĻŦāĻžāĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻ˛āĻŋāĻā§āĻ āĻāĻ°āĻž āĻā§āĻŦāĻŋāĻ˛ āĻĨā§āĻā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ¨ āĻā§āĻˇā§āĻ¤ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻ¤ā§ JOIN āĻā§ āĻļāĻ°ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻ°āĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻāĻā§āĨ¤
āĻāĻ¸ā§āĻ¨ āĻ¸ā§āĻā§āĻā§āĻ¤ āĻā§āĻˇā§āĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ "CASE āĻŦāĻ¨ā§āĻ§āĻ¨ā§āĻ° āĻŦāĻžāĻāĻ°ā§" āĻā§āĻĄāĻŧā§ āĻĻā§āĻ, WHEN āĻŦā§āĻ˛āĻā§ āĻ°ā§āĻāĻ°ā§āĻĄ āĻĨā§āĻā§ āĻ¸āĻšāĻ āĻļāĻ°ā§āĻ¤ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ - āĻāĻŦāĻ āĻāĻāĻ¨ "āĻāĻžāĻ°ā§" āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§āĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° THEN-āĻ āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
āĻāĻŽāĻžāĻ° āĻļā§āĻˇ āĻ¨āĻžāĻŽ "āĻŽā§āĻ"
āĻāĻŽāĻ°āĻž āĻāĻĒāĻ°ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŽā§āĻāĻžāĻ¨āĻŋāĻā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻŋ:
WITH T AS (
SELECT
"@ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°"
FROM
"ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°"
WHERE
"ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°" = 'ĐĐģĐ°ĐŊРайОŅ'
)
(
SELECT
TRUE
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅ" d
WHERE
("ĐиŅĐž3", "ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°") = (19091, (TABLE T)) AND
CASE
WHEN "$ЧĐĩŅĐŊОвиĐē" IS NULL AND "ĐŖĐ´Đ°ĐģĐĩĐŊ" IS NOT TRUE THEN (
SELECT
"ĐĄĐžŅŅĐžŅĐŊиĐĩ"[1] IS TRUE
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅĐ Đ°ŅŅиŅĐĩĐŊиĐĩ"
WHERE
"@ĐĐžĐēŅĐŧĐĩĐŊŅ" = d."@ĐĐžĐēŅĐŧĐĩĐŊŅ"
)
END
LIMIT 1
)
UNION ALL
(
SELECT
TRUE
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅ" d
WHERE
("ĐĸиĐŋĐĐžĐēŅĐŧĐĩĐŊŅĐ°", "ĐĄĐžŅŅŅĐ´ĐŊиĐē") = ((TABLE T), 19091) AND
CASE
WHEN "$ЧĐĩŅĐŊОвиĐē" IS NULL AND "ĐŖĐ´Đ°ĐģĐĩĐŊ" IS NOT TRUE THEN (
SELECT
"ĐĄĐžŅŅĐžŅĐŊиĐĩ"[1] IS TRUE
FROM
"ĐĐžĐēŅĐŧĐĩĐŊŅĐ Đ°ŅŅиŅĐĩĐŊиĐĩ"
WHERE
"@ĐĐžĐēŅĐŧĐĩĐŊŅ" = d."@ĐĐžĐēŅĐŧĐĩĐŊŅ"
)
END
LIMIT 1
)
LIMIT 1;
āĻ¸ā§āĻā§ [āĻ¤ā§] āĻ¸āĻžāĻŽāĻā§āĻāĻ¸ā§āĻ¯ āĻāĻ°āĻž
āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻļāĻŋāĻā§āĻˇāĻŋāĻ¤ āĻā§āĻ āĻ˛āĻā§āĻˇā§āĻ¯ āĻāĻ°ā§āĻā§ āĻ¯ā§ UNION āĻ¸āĻžāĻŦāĻŦā§āĻ˛āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻ¸ā§āĻā§āĻā§āĻ¤ āĻļāĻ°ā§āĻ¤āĻā§āĻ˛āĻŋ āĻāĻŋāĻā§āĻāĻž āĻāĻ˛āĻžāĻĻāĻž - āĻāĻ° āĻāĻžāĻ°āĻŖ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻŦāĻŋāĻ˛ā§ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻ¸ā§āĻāĻ āĻ°āĻ¯āĻŧā§āĻā§ā§ˇ āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻ¤āĻžāĻ°āĻž āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨āĻž āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻŽā§āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨ āĻšāĻŦā§: āĻ¨āĻĨāĻŋ (āĻŦā§āĻ¯āĻā§āĻ¤āĻŋ3, āĻ¨āĻĨāĻŋāĻ° āĻĒā§āĻ°āĻāĻžāĻ°) и āĻ¨āĻĨāĻŋ (āĻĄāĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻĒā§āĻ°āĻāĻžāĻ°, āĻāĻ°ā§āĻŽāĻāĻžāĻ°ā§).
ROW āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻā§āĻ°āĻŽ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻžāĻāĻžāĻ°ā§āĻ° āĻĻā§āĻˇā§āĻāĻŋāĻā§āĻŖ āĻĨā§āĻā§, āĻ
āĻŦāĻļā§āĻ¯āĻ, āĻāĻĒāĻ¨āĻŋ āĻ˛āĻŋāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ (A, B) = (constA, constB)āĻāĻŦāĻ (B, A) = (constB, constA). āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ°ā§āĻāĻ°ā§āĻĄāĻŋāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻāĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻā§āĻ°āĻŽ āĻ
āĻ¨ā§āĻ¸āĻžāĻ°ā§, āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻĒāĻ°ā§ āĻĄāĻŋāĻŦāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°āĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻāĨ¤
āĻāĻŋ āĻāĻā§ āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻžāĻ¯āĻŧ?
āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, āĻāĻŽāĻ°āĻž āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤ āĻāĻŋāĻ˛āĻžāĻŽ āĻāĻŦāĻ āĻĒā§āĻ°āĻĨāĻŽ UNION āĻŦā§āĻ˛āĻā§ āĻāĻŋāĻā§āĻ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ, āĻ¤āĻžāĻ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ āĻāĻāĻ¨āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻŦā§āĻ - āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 0.037ms āĻāĻŦāĻ 11 āĻŦāĻžāĻĢāĻžāĻ°!
āĻāĻŽāĻ°āĻž āĻ
āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻāĻ¤āĻŋ āĻŦāĻžāĻĄāĻŧāĻŋāĻ¯āĻŧā§āĻāĻŋ āĻāĻŦāĻ āĻŽā§āĻŽāĻ°āĻŋāĻ¤ā§ āĻĄā§āĻāĻž āĻĒāĻžāĻŽā§āĻĒāĻŋāĻ āĻāĻŽāĻŋāĻ¯āĻŧā§āĻāĻŋ āĻāĻ¯āĻŧā§āĻ āĻšāĻžāĻāĻžāĻ° āĻŦāĻžāĻ°, āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻ¸āĻšāĻ āĻā§āĻļāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ - āĻāĻāĻāĻŋ āĻ¸āĻžāĻŽāĻžāĻ¨ā§āĻ¯ āĻāĻĒāĻŋ-āĻĒā§āĻ¸ā§āĻ āĻ¸āĻā§āĻā§ āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻĢāĻ˛āĻžāĻĢāĻ˛. đ
āĻāĻ¤ā§āĻ¸: www.habr.com