PostgreSQL แƒแƒœแƒขแƒ˜แƒžแƒแƒขแƒ”แƒ แƒœแƒ”แƒ‘แƒ˜: แƒ›แƒแƒ•แƒœแƒ” แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ OR

แƒฃแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ“แƒ˜แƒ— แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒ‘แƒฃแƒคแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ›แƒแƒแƒฅแƒ•แƒ—...
แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ›แƒชแƒ˜แƒ แƒ” แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ— 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;

แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก "แƒ แƒฃแƒกแƒฃแƒšแƒ˜" แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒแƒ“ แƒ’แƒแƒœแƒ˜แƒฎแƒ˜แƒšแƒ”แƒ‘แƒแƒ“แƒ”แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒ’แƒ”แƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒ™แƒ˜แƒ—แƒฎแƒ˜แƒ. แฒ˜แƒ›แƒ˜แƒขแƒแƒ› แƒ แƒแƒ› แƒแƒฅ แƒขแƒ”แƒœแƒกแƒแƒ แƒจแƒ˜ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒฃแƒชแƒฎแƒแƒ”แƒšแƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ“แƒ PostgreSQL แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก แƒ›แƒ˜แƒ•แƒชแƒ”แƒ— แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ˜แƒ”แƒ แƒแƒ’แƒšแƒ˜แƒคแƒ”แƒ‘แƒ˜แƒ—, แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ‘แƒ แƒญแƒงแƒแƒšแƒ”แƒ‘แƒจแƒ˜ แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒ˜แƒ แƒฉแƒ”แƒ•แƒœแƒ˜แƒ แƒ“แƒแƒ•แƒแƒกแƒแƒฎแƒ”แƒšแƒแƒ— แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒชแƒแƒšแƒกแƒแƒฎแƒแƒ“ แƒ“แƒ แƒœแƒแƒ—แƒšแƒแƒ“, แƒ แƒแƒ—แƒ แƒแƒ  แƒ˜แƒงแƒแƒก แƒจแƒ”แƒฃแƒกแƒแƒ‘แƒแƒ›แƒแƒ‘แƒ”แƒ‘แƒ˜.
แƒ›แƒแƒ“แƒ˜แƒ— แƒจแƒ”แƒ•แƒฎแƒ”แƒ“แƒแƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒ’แƒ”แƒ’แƒ›แƒแƒก:
PostgreSQL แƒแƒœแƒขแƒ˜แƒžแƒแƒขแƒ”แƒ แƒœแƒ”แƒ‘แƒ˜: แƒ›แƒแƒ•แƒœแƒ” แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ OR
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

144 ms แƒ“แƒ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก 53K แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜ - แƒแƒœแƒฃ 400 แƒ›แƒ‘-แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜! แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ’แƒ•แƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ”แƒ‘แƒก, แƒ—แƒฃ แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒฅแƒ”แƒจแƒจแƒ˜ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒ“แƒแƒœ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒแƒก แƒ‘แƒ”แƒ•แƒ แƒฏแƒ”แƒ  แƒ›แƒ”แƒขแƒ˜ แƒ“แƒ แƒ แƒ“แƒแƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ!

แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒ’แƒ”แƒกแƒ›แƒแƒ“แƒ”แƒ—, แƒ แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒก.
แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒขแƒแƒ•แƒแƒ— แƒ—แƒ•แƒ˜แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒก แƒ’แƒแƒ แƒ”แƒ— แƒ“แƒ แƒจแƒ”แƒ•แƒ—แƒแƒœแƒฎแƒ›แƒ“แƒ”แƒ—, แƒ แƒแƒ› แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— โ€žแƒ˜แƒแƒคแƒแƒ“โ€œ แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ”แƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ“แƒ/แƒแƒœ แƒ’แƒแƒ“แƒแƒแƒฎแƒ•แƒ˜แƒ”แƒ— แƒ‘แƒแƒ–แƒแƒ–แƒ”, แƒ แƒแƒช แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜.

แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฎแƒแƒ•แƒœแƒ:
โ€” แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒ แƒแƒ˜แƒ›แƒ” แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒแƒก แƒ›แƒแƒ˜แƒœแƒช
- แƒ˜แƒ› แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก
- แƒกแƒแƒ“แƒแƒช แƒแƒ•แƒขแƒแƒ แƒ˜ แƒแƒœ แƒจแƒ”แƒ›แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒก แƒ—แƒแƒœแƒแƒ›แƒจแƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ

แƒจแƒ”แƒฃแƒ”แƒ แƒ—แƒ“แƒ˜ + แƒšแƒ˜แƒ›แƒ˜แƒขแƒ˜ 1

แƒฎแƒจแƒ˜แƒ แƒแƒ“ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒก แƒฃแƒแƒ“แƒ•แƒ˜แƒšแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ“แƒแƒฌแƒ”แƒ แƒ, แƒกแƒแƒ“แƒแƒช แƒฏแƒ”แƒ  แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ แƒฌแƒงแƒ›แƒฃแƒšแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ˜แƒ“แƒ˜ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒ—แƒ”แƒšแƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒ แƒฉแƒ”แƒ‘แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒแƒ  แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ‘แƒแƒก.
แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ˜แƒงแƒ แƒ›แƒฎแƒแƒšแƒแƒ“ 3 แƒ›แƒแƒ’แƒ˜แƒ“แƒ - แƒ“แƒ แƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒ˜ แƒแƒฅแƒ•แƒก...

แƒฏแƒ”แƒ  แƒ›แƒแƒ•แƒ˜แƒจแƒแƒ แƒแƒ— แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ "แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜" แƒชแƒฎแƒ แƒ˜แƒšแƒ—แƒแƒœ แƒ“แƒ แƒแƒ›แƒแƒ•แƒ” แƒ“แƒ แƒแƒก แƒ•แƒฃแƒ—แƒฎแƒ แƒแƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒก, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜แƒ (แƒ”แƒก แƒ•แƒ˜แƒชแƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒก แƒฏแƒ”แƒ  แƒแƒ  แƒแƒฅแƒ•แƒก แƒฌแƒแƒ แƒ›แƒแƒ“แƒ’แƒ”แƒœแƒ):

WITH T AS (
  SELECT
    "@ะขะธะฟะ”ะพะบัƒะผะตะฝั‚ะฐ"
  FROM
    "ะขะธะฟะ”ะพะบัƒะผะตะฝั‚ะฐ"
  WHERE
    "ะขะธะฟะ”ะพะบัƒะผะตะฝั‚ะฐ" = 'ะŸะปะฐะฝะ ะฐะฑะพั‚'
  LIMIT 1
)
...
WHERE
  d."ะขะธะฟะ”ะพะบัƒะผะตะฝั‚ะฐ" = (TABLE T)
...

แƒ“แƒ˜แƒแƒฎ, แƒ—แƒฃ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜/CTE แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒ แƒ”แƒ แƒ—แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ”แƒ แƒ—แƒ˜ แƒ•แƒ”แƒšแƒ˜แƒกแƒ’แƒแƒœ, แƒ›แƒแƒจแƒ˜แƒœ PG-แƒจแƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒแƒกแƒ”, แƒœแƒแƒชแƒ•แƒšแƒแƒ“

d."ะขะธะฟะ”ะพะบัƒะผะตะฝั‚ะฐ" = (SELECT "@ะขะธะฟะ”ะพะบัƒะผะตะฝั‚ะฐ" FROM T LIMIT 1)

แƒ–แƒแƒ แƒ›แƒแƒชแƒ˜ แƒจแƒ”แƒคแƒแƒกแƒ”แƒ‘แƒ PostgreSQL แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ”แƒ‘แƒจแƒ˜

BitmapOr vs UNION

แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ Bitmap Heap Scan แƒซแƒ•แƒ˜แƒ แƒ˜ แƒ“แƒแƒ’แƒ•แƒ˜แƒฏแƒ“แƒ”แƒ‘แƒ โ€“ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒแƒจแƒ˜, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒแƒ™แƒ›แƒแƒงแƒแƒคแƒ˜แƒšแƒ”แƒ‘แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒ˜แƒ แƒแƒ‘แƒแƒก. แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ— แƒ˜แƒ›แƒ˜แƒขแƒแƒ› OR แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ แƒ’แƒแƒ“แƒแƒ˜แƒฅแƒชแƒ BitmapOr-แƒแƒ“- แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ แƒ’แƒ”แƒ’แƒ›แƒแƒจแƒ˜.
แƒ“แƒแƒ•แƒฃแƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ— แƒกแƒแƒฌแƒงแƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒแƒก - แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ•แƒ˜แƒžแƒแƒ•แƒแƒ— แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ - แƒแƒœแƒฃ, แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒงแƒ•แƒ”แƒšแƒ 59K แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒซแƒ”แƒ‘แƒœแƒ แƒแƒ แƒ˜แƒ•แƒ” แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒ—. แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒ”แƒ แƒ—แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ’แƒ–แƒ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒ— แƒ›แƒ”แƒแƒ แƒ”แƒ–แƒ” แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒชแƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒจแƒ˜ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ˜แƒžแƒแƒ•แƒ”แƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜ แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ:

(
  SELECT
    ...
  LIMIT 1
)
UNION ALL
(
  SELECT
    ...
  LIMIT 1
)
LIMIT 1

โ€žแƒ’แƒแƒ แƒ”โ€œ LIMIT 1 แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒฆแƒ›แƒแƒฉแƒ”แƒœแƒ˜แƒกแƒ—แƒแƒœแƒแƒ•แƒ”. แƒ“แƒ แƒ—แƒฃ แƒ˜แƒก แƒฃแƒ™แƒ•แƒ” แƒœแƒแƒžแƒแƒ•แƒœแƒ˜แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ‘แƒšแƒแƒ™แƒจแƒ˜, แƒ›แƒ”แƒแƒ แƒ” แƒ‘แƒšแƒแƒ™แƒ˜ แƒแƒ  แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ (แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒแƒจแƒ˜).

"แƒ แƒ—แƒฃแƒšแƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒแƒšแƒ•แƒ แƒกแƒแƒฅแƒ›แƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜"

แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒจแƒ˜ แƒแƒ แƒ˜แƒก แƒฃแƒ™แƒ˜แƒ“แƒฃแƒ แƒ”แƒกแƒแƒ“ แƒแƒ แƒแƒกแƒแƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜ - แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒ—แƒแƒœ "DocumentExtension". แƒ’แƒแƒœแƒฃแƒ แƒฉแƒ”แƒ•แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒฎแƒแƒขแƒ•แƒ˜แƒก แƒกแƒฎแƒ•แƒ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒก แƒญแƒ”แƒจแƒ›แƒแƒ แƒ˜แƒขแƒ”แƒ‘แƒ˜แƒกแƒ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ“. โ€žแƒฌแƒแƒจแƒšแƒ˜แƒšแƒ˜โ€œ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ”), แƒ”แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ“แƒ โ€žแƒฎแƒแƒ แƒฏแƒแƒ•แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒกโ€œ. แƒ›แƒแƒ—แƒ’แƒแƒœ แƒ›แƒ”แƒข-แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒแƒ“ แƒ“แƒแƒ˜แƒฎแƒแƒ แƒฏแƒ”แƒ‘แƒ - แƒ”แƒก แƒ›แƒแƒ’แƒ˜แƒ“แƒ˜แƒก แƒ–แƒแƒ›แƒแƒ–แƒ”แƒ แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜.
แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒชแƒ•แƒแƒšแƒแƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ”แƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ:

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 แƒฅแƒ•แƒ”แƒ‘แƒšแƒแƒ™แƒ”แƒ‘แƒจแƒ˜ แƒแƒ“แƒœแƒแƒ• แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ - แƒ”แƒก แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒจแƒ”แƒกแƒแƒคแƒ”แƒ แƒ˜แƒกแƒ˜ แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒ–แƒ”. แƒ“แƒ แƒ—แƒฃ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒœแƒ”แƒœ, แƒฆแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ: แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ (Person3, DocumentType) ะธ แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ (แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜, แƒ—แƒแƒœแƒแƒ›แƒจแƒ แƒแƒ›แƒ”แƒšแƒ˜).
แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ ROW แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜แƒ“แƒแƒ›แƒ’แƒ”แƒ’แƒ›แƒแƒ•แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— (A, B) = (constA, constB)แƒ“แƒ (B, A) = (constB, constA). แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ—แƒแƒœแƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ˜แƒ—, แƒแƒกแƒ”แƒ—แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฃแƒคแƒ แƒ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.
แƒ แƒ แƒแƒ แƒ˜แƒก แƒ’แƒ”แƒ’แƒ›แƒแƒจแƒ˜?
PostgreSQL แƒแƒœแƒขแƒ˜แƒžแƒแƒขแƒ”แƒ แƒœแƒ”แƒ‘แƒ˜: แƒ›แƒแƒ•แƒœแƒ” แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒ“แƒ OR
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒแƒ“, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ’แƒ•แƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ แƒ“แƒ แƒžแƒ˜แƒ แƒ•แƒ”แƒš UNION แƒ‘แƒšแƒแƒ™แƒจแƒ˜ แƒ•แƒ”แƒ แƒแƒคแƒ”แƒ แƒ˜ แƒแƒฆแƒ›แƒแƒแƒฉแƒ˜แƒœแƒ”แƒก, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ›แƒ”แƒแƒ แƒ” แƒ›แƒแƒ˜แƒœแƒช แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒกแƒ”แƒช แƒ™แƒ˜ - แƒ›แƒฎแƒแƒšแƒแƒ“ 0.037ms แƒ“แƒ 11 แƒ‘แƒฃแƒคแƒ”แƒ แƒ˜!
แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒฉแƒฅแƒแƒ แƒ”แƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ“แƒ แƒจแƒ”แƒ•แƒแƒ›แƒชแƒ˜แƒ แƒ”แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ’แƒแƒ“แƒแƒขแƒฃแƒ›แƒ‘แƒ•แƒ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒแƒจแƒ˜ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒแƒ—แƒแƒกแƒฏแƒ”แƒ , แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— - แƒ™แƒแƒ แƒ’แƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒชแƒ˜แƒ แƒ” แƒ™แƒแƒžแƒ˜แƒ -แƒžแƒแƒกแƒขแƒ˜แƒ—. ๐Ÿ™‚

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ