PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ

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

แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒ’แƒแƒกแƒแƒ™แƒ•แƒ˜แƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒฎแƒ”แƒš แƒ’แƒแƒ•แƒแƒแƒœแƒแƒšแƒ˜แƒ–แƒแƒ— โ€žแƒ›แƒซแƒ˜แƒ›แƒ”โ€œ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—-แƒ”แƒ แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒš แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒ–แƒ” - แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ–แƒ”. VLSI แƒ™แƒแƒ แƒžแƒแƒ แƒแƒขแƒ˜แƒฃแƒšแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜, แƒ•แƒ˜แƒžแƒแƒ•แƒ” "แƒ–แƒ”แƒ“แƒแƒจแƒ˜" แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒ”แƒ— "แƒกแƒฌแƒ แƒแƒคแƒ˜" แƒซแƒ”แƒ‘แƒœแƒ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒกแƒแƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ แƒ‘แƒแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

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

0: แƒ แƒ แƒฃแƒœแƒ“แƒแƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก?

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ[KDPV แƒแƒฅแƒ”แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”,]

แƒ แƒแƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒกแƒแƒฃแƒ‘แƒ แƒแƒ‘แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— โ€žแƒกแƒฌแƒ แƒแƒคโ€œ แƒซแƒ˜แƒ”แƒ‘แƒแƒ–แƒ”? แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒแƒ แƒแƒกแƒแƒ“แƒ”แƒก แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ”แƒ‘แƒ โ€žแƒžแƒแƒขแƒ˜แƒแƒกแƒแƒœแƒ˜โ€œ แƒซแƒ˜แƒ”แƒ‘แƒ แƒ›แƒกแƒ’แƒแƒ•แƒกแƒ˜ แƒฅแƒ•แƒ”แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก ... LIKE '%ั€ะพะทะฐ%' - แƒ˜แƒ›แƒ˜แƒขแƒแƒ›, แƒ แƒแƒ› แƒ›แƒแƒจแƒ˜แƒœ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก แƒแƒ แƒ แƒ›แƒแƒ แƒขแƒ 'ะ ะพะทะฐะปะธั' ะธ 'ะœะฐะณะฐะทะธะฝ ะ ะพะทะฐ'แƒ›แƒแƒ’แƒ แƒแƒ› 'ะ“ั€ะพะทะฐ' แƒ“แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• 'ะ”ะพะผ ะ”ะตะดะฐ ะœะพั€ะพะทะฐ'.

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

1: แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ”แƒ— แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ

แƒ“แƒ แƒ›แƒ˜แƒ— แƒฃแƒ›แƒ”แƒขแƒ”แƒก, แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒแƒ“ แƒแƒ  แƒจแƒ”แƒ•แƒ 'ั€ะพะท ะผะฐะณะฐะท', แƒแƒกแƒ” แƒ แƒแƒ› แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒแƒ— แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒ—. แƒแƒ แƒ, แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ‘แƒ”แƒ•แƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜แƒ แƒฃแƒžแƒแƒกแƒฃแƒฎแƒแƒก แƒกแƒฌแƒ แƒแƒค แƒ›แƒ˜แƒœแƒ˜แƒจแƒœแƒ”แƒ‘แƒแƒก แƒ‘แƒแƒšแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ›แƒ˜แƒ–แƒแƒœแƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒแƒ“ โ€žแƒ“แƒแƒฃแƒ–แƒฃแƒกแƒขแƒแƒกโ€œ แƒฌแƒ˜แƒœแƒ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜ - แƒœแƒแƒฎแƒ”แƒ—, แƒ แƒแƒ’แƒแƒ  แƒฃแƒ›แƒ™แƒšแƒแƒ•แƒ“แƒ”แƒ‘แƒ แƒแƒ›แƒแƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ.

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

แƒ แƒแƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒแƒ‘แƒกแƒขแƒ แƒแƒฅแƒขแƒฃแƒšแƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜?

1.0: แƒ’แƒแƒ แƒ” แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ

แƒแƒฐ, แƒซแƒ”แƒ‘แƒœแƒ แƒ แƒ—แƒฃแƒšแƒ˜แƒ, แƒ›แƒ” แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒ แƒแƒ แƒแƒคแƒ แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ - แƒ›แƒแƒ“แƒ˜แƒ—, แƒ”แƒก แƒ“แƒ”แƒ•แƒแƒžแƒก แƒ›แƒ˜แƒ•แƒชแƒ”แƒ—! แƒ“แƒแƒ” แƒ›แƒแƒ— แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒแƒœ แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ—: Sphinx, ElasticSearch,...

แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜, แƒ—แƒฃแƒ›แƒชแƒ แƒจแƒ แƒแƒ›แƒแƒขแƒ”แƒ•แƒแƒ“แƒ˜ แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ แƒ“แƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒซแƒ”แƒ‘แƒœแƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ˜แƒกแƒ˜ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜. แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒชแƒ•แƒแƒšแƒ”แƒ‘แƒแƒ“แƒแƒ‘แƒ - แƒ“แƒ แƒ—แƒฃ แƒ›แƒ”แƒœแƒ”แƒฏแƒ”แƒ แƒ˜ แƒแƒฎแƒšแƒ แƒจแƒ”แƒ•แƒ˜แƒ“แƒ แƒ‘แƒแƒ แƒแƒ—แƒจแƒ˜ 'ะœะฐะณะฐะทะธะฝ ะ ะพะทะฐ', แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ 5-10 แƒฌแƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฃแƒ™แƒ•แƒ” แƒแƒฎแƒกแƒแƒ•แƒ“แƒ”แƒก, แƒ แƒแƒ› แƒ“แƒแƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ”แƒš.แƒคแƒแƒกแƒขแƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒ˜แƒฅ แƒ“แƒ แƒกแƒฃแƒ แƒ“แƒ”แƒก แƒ›แƒ˜แƒกแƒ˜ แƒžแƒแƒ•แƒœแƒ แƒ“แƒ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ.

แƒแƒ›แƒ˜แƒขแƒแƒ› - แƒ›แƒแƒ“แƒ˜แƒ— แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒ”แƒ— โ€žแƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒแƒจแƒ˜โ€œ. แƒกแƒแƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒแƒ“, PostgreSQL แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒ•แƒแƒซแƒšแƒ”แƒ•แƒก แƒ“แƒ แƒแƒ แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ - แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒ— แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—.

1.1: "แƒžแƒแƒขแƒ˜แƒแƒกแƒแƒœแƒ˜" แƒฅแƒ•แƒ”แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜

แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒญแƒ”แƒ แƒ— แƒกแƒ˜แƒขแƒงแƒ•แƒแƒก "แƒฅแƒ•แƒ”แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜". แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฅแƒ•แƒ”แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒ— (แƒ“แƒ แƒ—แƒฃแƒœแƒ“แƒแƒช แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ’แƒแƒ›แƒแƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ”แƒ‘แƒ˜แƒ—!) แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ pg_trgm! แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒกแƒฌแƒแƒ แƒ˜ แƒ“แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ”แƒ‘แƒ.

แƒ›แƒแƒ“แƒ”แƒšแƒ˜แƒก แƒ’แƒแƒกแƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒšแƒแƒ“ แƒแƒ•แƒ˜แƒฆแƒแƒ— แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒคแƒ˜แƒ แƒคแƒ˜แƒขแƒ:

CREATE TABLE firms(
  id
    serial
      PRIMARY KEY
, name
    text
);

แƒฉแƒ•แƒ”แƒœ แƒ˜แƒฅ แƒแƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒ— แƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜ แƒแƒ แƒ’แƒแƒœแƒ˜แƒ–แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก 7.8 แƒ›แƒ˜แƒšแƒ˜แƒแƒœ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒก แƒ“แƒ แƒ›แƒแƒ— แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒ•แƒแƒฎแƒ“แƒ”แƒœแƒ—:

CREATE EXTENSION pg_trgm;
CREATE INDEX ON firms USING gin(lower(name) gin_trgm_ops);

แƒ›แƒแƒ“แƒ˜ แƒ•แƒ”แƒซแƒ”แƒ‘แƒแƒ— แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ 10 แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒฎแƒแƒ–แƒฃแƒ แƒ˜ แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

SELECT
  *
FROM
  firms
WHERE
  lower(name) ~ ('(^|s)' || 'ั€ะพะทะฐ')
ORDER BY
  lower(name) ~ ('^' || 'ั€ะพะทะฐ') DESC -- ัะฝะฐั‡ะฐะปะฐ "ะฝะฐั‡ะธะฝะฐัŽั‰ะธะตัั ะฝะฐ"
, lower(name) -- ะพัั‚ะฐะปัŒะฝะพะต ะฟะพ ะฐะปั„ะฐะฒะธั‚ัƒ
LIMIT 10;

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒ˜แƒกแƒ”, แƒ”แƒก แƒแƒ แƒ˜แƒก ... 26 ms, 31 MB แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ“แƒ 1.7K-แƒ–แƒ” แƒ›แƒ”แƒขแƒ˜ แƒ’แƒแƒคแƒ˜แƒšแƒขแƒ แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ - 10 แƒ›แƒแƒซแƒ˜แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ–แƒ”แƒ“แƒ›แƒ”แƒขแƒแƒ“ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒฎแƒแƒ แƒฏแƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒ›แƒ” แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก?

1.2: แƒซแƒ˜แƒ”แƒ‘แƒ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒ—? แƒ”แƒก แƒแƒ แƒ˜แƒก FTS!

แƒ›แƒแƒ แƒ—แƒšแƒแƒช, PostgreSQL แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒซแƒšแƒ˜แƒ”แƒ  แƒกแƒ แƒฃแƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒกแƒแƒซแƒ˜แƒ”แƒ‘แƒ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ (แƒกแƒ แƒฃแƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ), แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒฉแƒแƒ—แƒ•แƒšแƒ˜แƒ—. แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜, แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒ แƒช แƒ™แƒ˜ แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ! แฒ›แƒแƒ“แƒ˜ แƒ•แƒชแƒแƒ“แƒแƒ—:

CREATE INDEX ON firms USING gin(to_tsvector('simple'::regconfig, lower(name)));

SELECT
  *
FROM
  firms
WHERE
  to_tsvector('simple'::regconfig, lower(name)) @@ to_tsquery('simple', 'ั€ะพะทะฐ:*')
ORDER BY
  lower(name) ~ ('^' || 'ั€ะพะทะฐ') DESC
, lower(name)
LIMIT 10;

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒแƒฅ แƒจแƒ”แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒšแƒ”แƒšแƒ˜แƒ–แƒ”แƒ‘แƒ แƒชแƒแƒขแƒ แƒ“แƒแƒ’แƒ•แƒ”แƒฎแƒ›แƒแƒ แƒ, แƒ“แƒ แƒ แƒ’แƒแƒœแƒแƒฎแƒ”แƒ•แƒ แƒ“แƒ 11 ms. แƒ“แƒ 1.5-แƒฏแƒ”แƒ  แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ’แƒ•แƒ˜แƒฌแƒ˜แƒ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ - แƒฏแƒแƒ›แƒจแƒ˜ 20MB. แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒฅ, แƒ แƒแƒช แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜แƒ, แƒ›แƒ˜แƒ— แƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ แƒแƒช แƒฃแƒคแƒ แƒ แƒ“แƒ˜แƒ“แƒ˜แƒ แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ”แƒ  แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜ แƒ›แƒแƒชแƒฃแƒšแƒแƒ‘แƒ, แƒ›แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒ›แƒแƒฆแƒแƒšแƒ˜แƒ แƒฅแƒ”แƒจแƒ˜แƒก แƒ’แƒแƒ›แƒแƒขแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒแƒœแƒกแƒ˜ แƒ“แƒ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒ“แƒแƒœ แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ แƒžแƒแƒขแƒ”แƒœแƒชแƒ˜แƒฃแƒ แƒ˜ โ€žแƒ›แƒฃแƒฎแƒ แƒฃแƒญแƒ”แƒ‘แƒ˜แƒโ€œ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

1.3: แƒ˜แƒกแƒ”แƒ• แƒ›แƒแƒ’แƒฌแƒแƒœแƒก?

แƒฌแƒ˜แƒœแƒ แƒ—แƒฎแƒแƒ•แƒœแƒ แƒงแƒ•แƒ”แƒšแƒแƒกแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜แƒ, แƒแƒฆแƒแƒœแƒ“ แƒ“แƒฆแƒ”แƒจแƒ˜ แƒแƒกแƒ˜ แƒแƒ—แƒแƒกแƒฏแƒ”แƒ  แƒ แƒแƒ› แƒ’แƒแƒ˜แƒฌแƒ˜แƒ, แƒ›แƒแƒ•แƒ 2TB แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ— แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜. แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒฃ แƒ’แƒแƒ’แƒ˜แƒ›แƒแƒ แƒ—แƒšแƒแƒ—, แƒ›แƒแƒจแƒ˜แƒœ แƒ“แƒ˜แƒกแƒ™แƒ˜แƒ“แƒแƒœ. แƒแƒ›แƒ˜แƒขแƒแƒ› แƒ•แƒ”แƒชแƒแƒ“แƒแƒ—, แƒ แƒแƒ› แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒžแƒแƒขแƒแƒ แƒ แƒ˜แƒงแƒแƒก.

แƒ’แƒแƒ•แƒ˜แƒฎแƒกแƒ”แƒœแƒแƒ— แƒ แƒ˜แƒกแƒ˜ แƒœแƒแƒฎแƒ•แƒ แƒกแƒฃแƒ แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ "แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ ...". แƒแƒกแƒ” แƒ แƒแƒ›, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒกแƒ˜ แƒกแƒฃแƒคแƒ—แƒ แƒกแƒแƒฎแƒ˜แƒ— แƒžแƒ แƒ”แƒคแƒ˜แƒฅแƒกแƒ˜แƒก แƒซแƒ”แƒ‘แƒœแƒ via text_pattern_ops! แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒฉแƒ•แƒ”แƒœ "แƒแƒ  แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜" 10-แƒ›แƒ“แƒ” แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ•แƒ”แƒซแƒ”แƒ‘แƒ—, แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ›แƒแƒ—แƒ˜ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ FTS แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—:

CREATE INDEX ON firms(lower(name) text_pattern_ops);

SELECT
  *
FROM
  firms
WHERE
  lower(name) LIKE ('ั€ะพะทะฐ' || '%')
LIMIT 10;

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ - แƒกแƒฃแƒš 0.05ms แƒ“แƒ 100KB-แƒ–แƒ” แƒชแƒแƒขแƒ แƒ›แƒ”แƒขแƒ˜ แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”! แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ’แƒ•แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ“แƒแƒšแƒแƒ’แƒ”แƒ‘แƒแƒ แƒแƒ—แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒ  แƒ“แƒแƒ˜แƒ™แƒแƒ แƒ’แƒแƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒจแƒ˜:

SELECT
  *
FROM
  firms
WHERE
  lower(name) LIKE ('ั€ะพะทะฐ' || '%')
ORDER BY
  lower(name)
LIMIT 10;

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

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

1.4: "แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒ—"

แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒ“แƒ”แƒฅแƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒแƒ— แƒ“แƒ˜แƒแƒžแƒแƒ–แƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ“แƒ แƒ™แƒ•แƒšแƒแƒ• แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ“แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ”แƒ‘แƒ แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒแƒ“ - แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ‘แƒฎแƒ”!

CREATE INDEX ON firms(lower(name));

แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒกแƒ–แƒ” แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก โ€žแƒฎแƒ”แƒšแƒ˜แƒ— แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜โ€œ:

SELECT
  *
FROM
  firms
WHERE
  lower(name) >= 'ั€ะพะทะฐ' AND
  lower(name) <= ('ั€ะพะทะฐ' || chr(65535)) -- ะดะปั UTF8, ะดะปั ะพะดะฝะพะฑะฐะนั‚ะพะฒั‹ั… - chr(255)
ORDER BY
   lower(name)
LIMIT 10;

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ - แƒ“แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ”แƒ‘แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ“แƒ แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ แƒฉแƒ”แƒ‘แƒ "แƒ›แƒ˜แƒ™แƒ แƒแƒกแƒ™แƒแƒžแƒฃแƒšแƒ˜", แƒแƒ—แƒแƒกแƒแƒ‘แƒ˜แƒ—แƒฏแƒ”แƒ  แƒฃแƒคแƒ แƒ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒ•แƒ˜แƒ“แƒ แƒ” "แƒกแƒฃแƒคแƒ—แƒ" FTS! แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒ”แƒ แƒ—แƒ˜แƒแƒœแƒ”แƒ‘แƒ แƒ”แƒ แƒ— แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒ“:

(
  SELECT
    *
  FROM
    firms
  WHERE
    lower(name) >= 'ั€ะพะทะฐ' AND
    lower(name) <= ('ั€ะพะทะฐ' || chr(65535)) -- ะดะปั UTF8, ะดะปั ะพะดะฝะพะฑะฐะนั‚ะพะฒั‹ั… ะบะพะดะธั€ะพะฒะพะบ - chr(255)
  ORDER BY
     lower(name)
  LIMIT 10
)
UNION ALL
(
  SELECT
    *
  FROM
    firms
  WHERE
    to_tsvector('simple'::regconfig, lower(name)) @@ to_tsquery('simple', 'ั€ะพะทะฐ:*') AND
    lower(name) NOT LIKE ('ั€ะพะทะฐ' || '%') -- "ะฝะฐั‡ะธะฝะฐัŽั‰ะธะตัั ะฝะฐ" ะผั‹ ัƒะถะต ะฝะฐัˆะปะธ ะฒั‹ัˆะต
  ORDER BY
    lower(name) ~ ('^' || 'ั€ะพะทะฐ') DESC -- ะธัะฟะพะปัŒะทัƒะตะผ ั‚ัƒ ะถะต ัะพั€ั‚ะธั€ะพะฒะบัƒ, ั‡ั‚ะพะฑั‹ ะะ• ะฟะพะนั‚ะธ ะฟะพ btree-ะธะฝะดะตะบััƒ
  , lower(name)
  LIMIT 10
)
LIMIT 10;

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

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ“แƒ˜แƒแƒฎ, แƒฉแƒ•แƒ”แƒœ แƒแƒฎแƒšแƒ แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜แƒ•แƒ” btree แƒ“แƒ แƒฏแƒ˜แƒœแƒ˜ แƒ›แƒแƒ’แƒ˜แƒ“แƒแƒ–แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒกแƒขแƒ˜แƒ™แƒฃแƒ แƒแƒ“ แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก 10%-แƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜ แƒแƒฆแƒฌแƒ”แƒ•แƒก แƒ›แƒ”แƒแƒ แƒ” แƒ‘แƒšแƒแƒ™แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒก. แƒแƒœแƒฃ, แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒก แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒแƒกแƒ”แƒ—แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒฃแƒ แƒ˜ แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ”แƒ‘แƒ˜แƒ—, แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒซแƒ”แƒšแƒ˜แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒ˜ แƒ›แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ˜แƒ แƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก แƒแƒ—แƒแƒกแƒฏแƒ”แƒ !

1.5*: แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”

แƒ–แƒ”แƒ›แƒแƒ— LIKE แƒฉแƒ•แƒ”แƒœ แƒฎแƒ”แƒšแƒ˜ แƒจแƒ”แƒ’แƒ•แƒ˜แƒจแƒแƒšแƒ”แƒก แƒแƒ แƒแƒกแƒฌแƒแƒ แƒ˜ แƒ“แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒจแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ˜ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ "แƒกแƒฌแƒแƒ  แƒ’แƒ–แƒแƒ–แƒ”" USING แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒ—:

แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ แƒ•แƒแƒ แƒแƒฃแƒ“แƒแƒ‘แƒ”แƒœ ASC. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒ“แƒแƒฎแƒแƒ แƒ˜แƒกแƒฎแƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒžแƒฃแƒœแƒฅแƒขแƒจแƒ˜ USING. แƒ“แƒแƒšแƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ˜ แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก B-แƒฎแƒ˜แƒก แƒแƒžแƒ”แƒ แƒแƒขแƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒแƒฏแƒแƒฎแƒ˜แƒก แƒฌแƒ”แƒ•แƒ แƒ–แƒ” แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜ แƒแƒœ แƒ›แƒ”แƒขแƒ˜. ASC แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ”แƒฅแƒ•แƒ˜แƒ•แƒแƒšแƒ”แƒœแƒขแƒ˜ USING < ะธ DESC แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ”แƒฅแƒ•แƒ˜แƒ•แƒแƒšแƒ”แƒœแƒขแƒ˜ USING >.

แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, "แƒœแƒแƒ™แƒšแƒ”แƒ‘แƒ˜" แƒแƒ แƒ˜แƒก ~<~:

SELECT
  *
FROM
  firms
WHERE
  lower(name) LIKE ('ั€ะพะทะฐ' || '%')
ORDER BY
  lower(name) USING ~<~
LIMIT 10;

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ
[แƒœแƒแƒฎแƒ”แƒ— description.tensor.ru]

2: แƒ แƒแƒ’แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ›แƒŸแƒแƒ•แƒ”

แƒแƒฎแƒšแƒ แƒฉแƒ•แƒ”แƒœ แƒ•แƒขแƒแƒ•แƒ”แƒ‘แƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒ”แƒฅแƒ•แƒกแƒ˜ แƒ—แƒ•แƒ˜แƒก แƒแƒœ แƒ”แƒ แƒ—แƒ˜ แƒฌแƒšแƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ "แƒแƒ“แƒฃแƒฆแƒ”แƒ‘แƒแƒก" แƒ“แƒ แƒ’แƒแƒ™แƒ•แƒ˜แƒ แƒ•แƒ”แƒ‘แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒแƒฆแƒ›แƒแƒ•แƒแƒฉแƒ˜แƒœแƒ”แƒ— แƒ˜แƒก แƒ™แƒ•แƒšแƒแƒ• "แƒ–แƒ”แƒ“แƒแƒ–แƒ”" แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒ˜ แƒงแƒแƒ•แƒ”แƒšแƒ“แƒฆแƒ˜แƒฃแƒ แƒ˜ "แƒ’แƒแƒ›แƒแƒขแƒฃแƒ›แƒ‘แƒ•แƒ˜แƒก" แƒ›แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒ— (แƒ‘แƒฃแƒคแƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ–แƒ˜แƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ“แƒแƒ แƒขแƒงแƒ›แƒ) 5.5TB - แƒแƒœแƒฃ แƒ˜แƒ›แƒแƒ–แƒ” แƒ›แƒ”แƒขแƒ˜แƒช, แƒ•แƒ˜แƒ“แƒ แƒ” แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“ แƒ˜แƒงแƒ.

แƒแƒ แƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ‘แƒ˜แƒ–แƒœแƒ”แƒกแƒ˜ แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒ แƒ“แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒ’แƒแƒ˜แƒ–แƒแƒ แƒ“แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ—! แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒฅ แƒ แƒแƒฆแƒแƒช แƒกแƒ”แƒ•แƒ“แƒ˜แƒแƒœแƒ˜แƒ - แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ•แƒแƒ แƒ™แƒ•แƒ˜แƒแƒ—.

2.1: แƒžแƒ”แƒ˜แƒฏแƒ˜แƒœแƒ’แƒ˜แƒก แƒ“แƒแƒ‘แƒแƒ“แƒ”แƒ‘แƒ

แƒ แƒแƒฆแƒแƒช แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜, แƒกแƒฎแƒ•แƒ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒก แƒกแƒฃแƒ แƒ“แƒ, แƒ แƒแƒ› แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒงแƒแƒคแƒ˜แƒšแƒ˜แƒงแƒ โ€žแƒ’แƒแƒ“แƒแƒฎแƒขแƒแƒ›แƒโ€œ แƒกแƒฌแƒ แƒแƒคแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ แƒ”แƒ”แƒกแƒขแƒ แƒจแƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ”, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒแƒคแƒแƒ แƒ—แƒแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒ—. แƒ แƒ แƒแƒ แƒ˜แƒก แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก แƒœแƒแƒ•แƒ˜แƒ’แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”? แƒ›แƒแƒ“แƒ˜ แƒ’แƒแƒ•แƒแƒคแƒฃแƒญแƒแƒ—!

( ... LIMIT <N> + 10)
UNION ALL
( ... LIMIT <N> + 10)
LIMIT 10 OFFSET <N>;

แƒแƒฎแƒšแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ˜แƒงแƒ แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ โ€žแƒ’แƒ•แƒ”แƒ แƒ“แƒ˜-แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒกโ€œ แƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒ—, แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒกแƒขแƒ แƒ”แƒกแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

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

2.2: แƒ แƒแƒฆแƒแƒช แƒ”แƒ’แƒ–แƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ›แƒ˜แƒœแƒ“แƒ

แƒ แƒแƒฆแƒแƒช แƒ›แƒแƒ›แƒ”แƒœแƒขแƒจแƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒก แƒกแƒฃแƒ แƒ“แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜แƒก แƒ“แƒ˜แƒ•แƒ”แƒ แƒกแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒกแƒฎแƒ•แƒ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜แƒ“แƒแƒœ, แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒ›แƒ—แƒ”แƒšแƒ˜ แƒฌแƒ˜แƒœแƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ’แƒแƒ”แƒ’แƒ–แƒแƒ•แƒœแƒ CTE-แƒก:

WITH q AS (
  ...
  LIMIT <N> + 10
)
SELECT
  *
, (SELECT ...) sub_query -- ะบะฐะบะพะน-ั‚ะพ ะทะฐะฟั€ะพั ะบ ัะฒัะทะฐะฝะฝะพะน ั‚ะฐะฑะปะธั†ะต
FROM
  q
LIMIT 10 OFFSET <N>;

แƒ“แƒ แƒแƒกแƒ”แƒช แƒ แƒแƒ› แƒ˜แƒงแƒแƒก, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒชแƒฃแƒ“แƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฅแƒ•แƒ”แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒคแƒแƒกแƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ 10 แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฃ แƒแƒ แƒ ...

2.3: DISTINCT แƒฃแƒแƒ–แƒ แƒ แƒ“แƒ แƒ“แƒแƒฃแƒœแƒ“แƒแƒ‘แƒ”แƒšแƒ˜แƒ

แƒกแƒแƒ“แƒฆแƒแƒช แƒแƒกแƒ”แƒ—แƒ˜ แƒ”แƒ•แƒแƒšแƒฃแƒชแƒ˜แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒ›แƒ”-2 แƒฅแƒ•แƒ”แƒ›แƒแƒซแƒ˜แƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒ˜แƒ™แƒแƒ แƒ’แƒ NOT LIKE แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ. แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒ› แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ UNION ALL แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ“แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒแƒ แƒฏแƒ”แƒ  - แƒฏแƒ”แƒ  แƒœแƒแƒžแƒแƒ•แƒœแƒ˜แƒ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ™แƒ˜ - แƒแƒ› แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ˜แƒกแƒจแƒ˜. แƒšแƒ˜แƒ›แƒ˜แƒขแƒจแƒ˜, แƒ›แƒ”-2 แƒฅแƒ•แƒ”แƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒแƒ“แƒ”แƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒก.

แƒ แƒแƒก แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒ›แƒ˜แƒ–แƒ”แƒ–แƒ˜แƒก แƒซแƒ”แƒ‘แƒœแƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“?.. แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ แƒแƒ แƒแƒ!

  • แƒ’แƒแƒแƒ แƒ›แƒแƒ’แƒ”แƒ‘แƒ แƒ–แƒแƒ›แƒ แƒแƒ แƒ˜แƒ’แƒ˜แƒœแƒแƒšแƒฃแƒ แƒ˜ แƒœแƒ˜แƒ›แƒฃแƒจแƒ”แƒ‘แƒ˜
  • แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ— DISTINCTแƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒฎแƒแƒ–แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒชแƒแƒšแƒ™แƒ”แƒฃแƒšแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“

WITH q AS (
  ( ... LIMIT <2 * N> + 10)
  UNION ALL
  ( ... LIMIT <2 * N> + 10)
  LIMIT <2 * N> + 10
)
SELECT DISTINCT
  *
, (SELECT ...) sub_query
FROM
  q
LIMIT 10 OFFSET <N>;

แƒแƒœแƒฃ, แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒ˜แƒ, แƒ แƒแƒ› แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜, แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒฏแƒแƒ›แƒจแƒ˜, แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒ’แƒ˜แƒ•แƒ”แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” -2 CTE แƒฅแƒ•แƒ”แƒ›แƒแƒซแƒ˜แƒ”แƒ‘แƒแƒจแƒ˜ "แƒ’แƒแƒคแƒ แƒ”แƒœแƒ˜แƒก" แƒจแƒแƒœแƒกแƒ˜ แƒ’แƒแƒชแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ’แƒแƒฎแƒ“แƒ แƒ“แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”แƒช แƒ™แƒ˜, แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒฃแƒคแƒ แƒ แƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ.

แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒ. แƒ•แƒ˜แƒœแƒแƒ˜แƒ“แƒแƒœ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ›แƒ แƒกแƒ—แƒฎแƒแƒ•แƒ แƒแƒ แƒฉแƒ”แƒ•แƒ DISTINCT แƒแƒ แƒ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒคแƒ”แƒ แƒแƒกแƒ—แƒ•แƒ˜แƒก แƒ”แƒ แƒ—แƒ“แƒ แƒแƒฃแƒšแƒแƒ“ แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒ”แƒ‘แƒ˜, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ sub_query แƒ•แƒ”แƒšแƒ˜ - แƒฅแƒ•แƒ”แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜ - แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒแƒ“ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ˜แƒงแƒ แƒ˜แƒฅ. แƒแƒฎแƒšแƒ, แƒจแƒ”แƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒšแƒแƒ“ DISTINCT, แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ แƒฃแƒ™แƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒงแƒ แƒแƒ แƒ 10 แƒฅแƒ•แƒ”แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ, แƒแƒ แƒแƒ›แƒ”แƒ“ แƒงแƒ•แƒ”แƒšแƒ + 2!

2.4: แƒฃแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ”แƒก แƒงแƒแƒ•แƒšแƒ˜แƒกแƒ แƒ—แƒแƒœแƒแƒ›แƒจแƒ แƒแƒ›แƒšแƒแƒ‘แƒ!

แƒแƒกแƒ” แƒ แƒแƒ›, แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒชแƒฎแƒแƒ•แƒ แƒแƒ‘แƒ“แƒœแƒ”แƒœ - แƒ›แƒแƒ— แƒแƒ  แƒแƒฌแƒฃแƒฎแƒ”แƒ‘แƒ“แƒœแƒ”แƒœ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก แƒแƒจแƒ™แƒแƒ แƒแƒ“ แƒแƒ  แƒฐแƒฅแƒแƒœแƒ“แƒ แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ›แƒแƒ—แƒ›แƒ˜แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ› "แƒ›แƒแƒ”แƒ แƒ’แƒ”แƒ‘แƒ˜แƒœแƒ" แƒ แƒ”แƒ”แƒกแƒขแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœ N แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ–แƒ”, แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ "แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒก" แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ˜แƒก แƒฅแƒ แƒแƒœแƒ˜แƒ™แƒฃแƒšแƒ˜ แƒจแƒ”แƒœแƒ”แƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒกแƒแƒœแƒแƒ› แƒกแƒฎแƒ•แƒ แƒ“แƒ”แƒžแƒแƒ แƒขแƒแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ›แƒ˜แƒ•แƒ˜แƒ“แƒœแƒ”แƒœ แƒ›แƒแƒ—แƒ—แƒแƒœ แƒ“แƒ แƒแƒ  แƒ›แƒแƒ˜แƒœแƒ“แƒแƒ›แƒ”แƒก แƒแƒกแƒ”แƒ—แƒ˜ แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒแƒœแƒฃ แƒ แƒแƒฆแƒแƒช แƒœแƒ˜แƒ›แƒฃแƒจแƒ˜แƒ“แƒแƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒœแƒแƒฌแƒ˜แƒšแƒก, แƒ•แƒคแƒ˜แƒšแƒขแƒ แƒแƒ•แƒ— แƒ›แƒแƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜แƒ—, แƒ•แƒฎแƒแƒขแƒแƒ•แƒ— แƒจแƒ”แƒ“แƒ”แƒ’แƒก, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒœแƒแƒญแƒ”แƒ แƒก (แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒ˜แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ N-แƒ˜แƒก แƒ’แƒแƒ–แƒ แƒ“แƒ˜แƒ—) แƒ“แƒ แƒแƒกแƒ” แƒ•แƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒ— แƒกแƒแƒœแƒแƒ› แƒ”แƒ™แƒ แƒแƒœแƒก แƒแƒ  แƒจแƒ”แƒ•แƒแƒ•แƒกแƒ”แƒ‘แƒ—.

แƒ–แƒแƒ’แƒแƒ“แƒแƒ“, แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒš แƒœแƒ˜แƒ›แƒฃแƒจแƒจแƒ˜ N แƒ›แƒ˜แƒแƒฆแƒฌแƒ˜แƒ แƒ—แƒ˜แƒ—แƒฅแƒ›แƒ˜แƒก 17K แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒก, แƒ“แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— แƒ“แƒฆแƒ”แƒจแƒ˜, แƒกแƒฃแƒš แƒ›แƒชแƒ˜แƒ แƒ”, 4K แƒแƒกแƒ”แƒ—แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ "แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒ’แƒแƒกแƒฌแƒ•แƒ แƒ˜แƒ•". แƒ‘แƒแƒšแƒ แƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ แƒ—แƒแƒ›แƒแƒ›แƒแƒ“ แƒ“แƒแƒแƒกแƒ™แƒแƒœแƒ˜แƒ แƒ 1 แƒ’แƒ‘ แƒ›แƒ”แƒฎแƒกแƒ˜แƒ”แƒ แƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒ แƒ’แƒแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒแƒ–แƒ”...

แƒกแƒแƒ”แƒ แƒ—แƒ แƒฏแƒแƒ›แƒจแƒ˜

PostgreSQL Antipatterns: แƒ–แƒฆแƒแƒžแƒแƒ แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒ”แƒแƒ แƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ“แƒแƒฎแƒ•แƒ”แƒฌแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒแƒœ โ€žแƒฌแƒ˜แƒœ แƒ“แƒ แƒฃแƒ™แƒแƒœ แƒแƒžแƒขแƒ˜แƒ›แƒ˜แƒ–แƒแƒชแƒ˜แƒโ€œ

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

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