PostgreSQL เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"

เจฆเฉ‡เจธเจผ เจญเจฐ เจฆเฉ‡ เจธเฉ‡เจฒเจœเจผ เจ†เจซเจฟเจธเจพเจ‚ เจฆเฉ‡ เจนเจœเจผเจพเจฐเจพเจ‚ เจฎเฉˆเจจเฉ‡เจœเจฐ เจฐเจฟเจ•เจพเจฐเจก เจ•เจฐเจฆเฉ‡ เจนเจจ เจธเจพเจกเจพ CRM เจธเจฟเจธเจŸเจฎ เจฐเฉ‹เจœเจผเจพเจจเจพ เจนเจœเจผเจพเจฐเจพเจ‚ เจธเฉฐเจชเจฐเจ• - เจธเฉฐเจญเจพเจตเฉ€ เจœเจพเจ‚ เจฎเฉŒเจœเฉ‚เจฆเจพ เจ—เจพเจนเจ•เจพเจ‚ เจจเจพเจฒ เจธเฉฐเจšเจพเจฐ เจฆเฉ‡ เจคเฉฑเจฅเฅค เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจ‡เฉฑเจ• เจ•เจฒเจพเจ‡เฉฐเจŸ เจฒเฉฑเจญเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจคเจฐเจœเฉ€เจนเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจนเฉเจค เจœเจฒเจฆเฉ€. เจ…เจคเฉ‡ เจ‡เจน เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ…เจ•เจธเจฐ เจตเจพเจชเจฐเจฆเจพ เจนเฉˆ.

เจ‡เจธ เจฒเจˆ, เจ‡เจน เจนเฉˆเจฐเจพเจจเฉ€ เจฆเฉ€ เจ—เฉฑเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟ, เจ‡เฉฑเจ• เจตเจพเจฐ เจซเจฟเจฐ เจธเจญ เจคเฉ‹เจ‚ เจตเฉฑเจง เจฒเฉ‹เจก เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• 'เจคเฉ‡ "เจญเจพเจฐเฉ€" เจธเจตเจพเจฒเจพเจ‚ เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐเจจเจพ - เจธเจพเจกเฉ‡ เจ†เจชเจฃเฉ‡ VLSI เจ•เจพเจฐเจชเฉ‹เจฐเฉ‡เจŸ เจ–เจพเจคเจพ, เจฎเฉˆเจจเฉ‚เฉฐ "เจธเจฟเจ–เจฐ เจตเจฟเฉฑเจš" เจฎเจฟเจฒเจฟเจ† เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ "เจคเฉเจฐเฉฐเจค" เจ–เฉ‹เจœ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€ เจธเฉฐเจ—เจ เจจ เจ•เจพเจฐเจก เจฒเจˆ.

เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ…เจ—เจฒเฉ‡เจฐเฉ€ เจœเจพเจ‚เจš เจคเฉ‹เจ‚ เจ‡เจ• เจฆเจฟเจฒเจšเจธเจช เจ‰เจฆเจพเจนเจฐเจฃ เจธเจพเจนเจฎเจฃเฉ‡ เจ†เจˆ เจนเฉˆ เจชเจนเจฟเจฒเจพเจ‚ เจ“เจชเจŸเฉ€เจฎเจพเจˆเจœเฉ‡เจธเจผเจจ เจ…เจคเฉ‡ เจซเจฟเจฐ เจชเฉเจฐเจฆเจฐเจธเจผเจจ เจตเจฟเฉฑเจš เจ—เจฟเจฐเจพเจตเจŸ เจ•เจˆ เจŸเฉ€เจฎเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจ‡เจธเจฆเฉ‡ เจ•เฉเจฐเจฎเจตเจพเจฐ เจธเฉเจงเจพเจˆ เจฆเฉ‡ เจจเจพเจฒ เจฌเฉ‡เจจเจคเฉ€, เจœเจฟเจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจนเจฐ เจ‡เฉฑเจ• เจจเฉ‡ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจตเจงเฉ€เจ† เจ‡เจฐเจพเจฆเจฟเจ†เจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพเฅค

0: เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ•เฉ€ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€?

PostgreSQL เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"[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 เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"
[explanation.tensor.ru 'เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹]

เจ–เฉˆเจฐ, เจ‡เจน... 26ms, 31MB เจกเจพเจŸเจพ เจชเฉœเฉเจนเฉ‹ เจ…เจคเฉ‡ 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 เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"
[explanation.tensor.ru 'เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹]

เจ‡เฉฑเจฅเฉ‡ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจฆเฉ‡ เจธเจฎเจพเจจเจคเจพ เจจเฉ‡ เจธเจพเจกเฉ€ เจฅเฉ‹เฉœเฉ€ เจฎเจฆเจฆ เจ•เฉ€เจคเฉ€, เจธเจฎเฉ‡เจ‚ เจจเฉ‚เฉฐ เจ…เฉฑเจงเจพ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ 11 เจฎเจฟ. เจ…เจคเฉ‡ เจธเจพเจจเฉ‚เฉฐ 1.5 เจ—เฉเจฃเจพ เจ˜เฉฑเจŸ เจชเฉœเฉเจนเจจเจพ เจชเจฟเจ† - เจ•เฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจ•เฉ‡ 20MB. เจชเจฐ เจ‡เฉฑเจฅเฉ‡, เจ˜เฉฑเจŸ, เจฌเจฟเจนเจคเจฐ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ…เจธเฉ€เจ‚ เจœเจฟเฉฐเจจเฉ€ เจตเฉฑเจกเฉ€ เจฎเจพเจคเจฐเจพ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเฉ‡ เจนเจพเจ‚, เจ•เฉˆเจธเจผ เจฎเจฟเจธ เจนเฉ‹เจฃ เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจตเฉฑเจง เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจกเจฟเจธเจ• เจคเฉ‹เจ‚ เจชเฉœเฉเจนเฉ‡ เจœเจพเจฃ เจตเจพเจฒเฉ‡ เจกเฉ‡เจŸเจพ เจฆเจพ เจนเจฐ เจตเจพเจงเฉ‚ เจชเฉฐเจจเจพ เจฌเฉ‡เจจเจคเฉ€ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉฐเจญเจพเจตเฉ€ "เจฌเฉเจฐเฉ‡เจ•" เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค

1.3: เจ…เจœเฉ‡ เจตเฉ€ เจชเจธเฉฐเจฆ เจนเฉˆ?

เจชเจฟเจ›เจฒเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจธเจพเจฐเจฟเจ†เจ‚ เจฒเจˆ เจšเฉฐเจ—เฉ€ เจนเฉˆ, เจชเจฐ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฆเจฟเจจ เจตเจฟเจš เจฒเฉฑเจ– เจตเจพเจฐเฉ€ เจ–เจฟเฉฑเจšเฉ‹ เจคเจพเจ‚ เจนเฉ€ เจ†เจตเฉ‡เจ—เฉ€ 2TB เจกเจพเจŸเจพ เจชเฉœเฉเจนเฉ‹. เจธเจญ เจคเฉ‹เจ‚ เจตเจงเฉ€เจ† เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจฎเฉˆเจฎเฉ‹เจฐเฉ€ เจคเฉ‹เจ‚, เจชเจฐ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจฌเจฆเจ•เจฟเจธเจฎเจค เจนเฉ‹, เจคเจพเจ‚ เจกเจฟเจธเจ• เจคเฉ‹เจ‚. เจ‡เจธ เจฒเจˆ เจ‡เจธ เจจเฉ‚เฉฐ เจ›เฉ‹เจŸเจพ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ.

เจ†เจ“ เจฏเจพเจฆ เจ•เจฐเฉ€เจ เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ•เฉ€ เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเฉˆ เจชเจนเจฟเจฒเจพเจ‚ "เจœเจฟเจธ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉเฉฐเจฆเจพ เจนเฉˆ...". เจ‡เจธ เจฒเจˆ เจ‡เจน เจ†เจชเจฃเฉ‡ เจธเจผเฉเฉฑเจง เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจนเฉˆ เจ…เจ—เฉ‡เจคเจฐ เจ–เฉ‹เจœ เจฆเฉ€ เจธเจนเจพเจ‡เจคเจพ เจจเจพเจฒ text_pattern_ops! เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจคเจพเจ‚ เจนเฉ€ เจœเฉ‡เจ•เจฐ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ 10 เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจคเฉฑเจ• "เจ•เจพเจซเจผเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆ" เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจฒเฉฑเจญ เจฐเจนเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ เจธเจพเจจเฉ‚เฉฐ FTS เจ–เฉ‹เจœ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจเจพ เจชเฉ‚เจฐเจพ เจ•เจฐเจจเจพ เจนเฉ‹เจตเฉ‡เจ—เจพ:

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

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

PostgreSQL เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"
[explanation.tensor.ru 'เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹]

เจธเจผเจพเจจเจฆเจพเจฐ เจชเฉเจฐเจฆเจฐเจธเจผเจจ - เจ•เฉเฉฑเจฒ 0.05ms เจ…เจคเฉ‡ 100KB เจคเฉ‹เจ‚ เจฅเฉ‹เฉœเฉเจนเจพ เจตเฉฑเจง เจชเฉœเฉเจนเฉ‹! เจธเจฟเจฐเจซเจผ เจ…เจธเฉ€เจ‚ เจญเฉเฉฑเจฒ เจ—เจ เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ•เฉเจฐเจฎเจฌเฉฑเจงเจคเจพเจ‚ เจœเฉ‹ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ—เฉเจ†เจš เจจเจพ เจœเจพเจตเฉ‡:

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

PostgreSQL เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"
[explanation.tensor.ru 'เจคเฉ‡ เจฆเฉ‡เจ–เฉ‹]

เจ“เจน, เจ•เฉ‹เจˆ เจšเฉ€เจœเจผ เจนเฉเจฃ เจ‡เฉฐเจจเฉ€ เจธเฉเฉฐเจฆเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ - เจ…เจœเจฟเจนเจพ เจฒเจ—เจฆเจพ เจนเฉˆ เจœเจฟเจตเฉ‡เจ‚ เจ•เฉ‹เจˆ เจธเฉ‚เจšเจ•เจพเจ‚เจ• เจนเฉˆ, เจชเจฐ เจ›เจพเจ‚เจŸเฉ€ เจ‡เจธ เจจเฉ‚เฉฐ เจชเจพเจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ... เจฌเฉ‡เจธเจผเจ•, เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจชเจฟเจ›เจฒเฉ‡ เจตเจฟเจ•เจฒเจช เจจเจพเจฒเฉ‹เจ‚ เจ•เจˆ เจ—เฉเจฃเจพ เจœเจผเจฟเจ†เจฆเจพ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ€ เจนเฉˆ, เจชเจฐ...

1.4: "เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจจเจพเจฒ เจ–เจคเจฎ เจ•เจฐเฉ‹"

เจชเจฐ เจ‡เฉฑเจ• เจ‡เฉฐเจกเฉˆเจ•เจธ เจนเฉˆ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฐเฉ‡เจ‚เจœ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจซเจฟเจฐ เจตเฉ€ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจ›เจพเจ‚เจŸเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ - เจจเจฟเจฏเจฎเจค btree!

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 เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"
[explanation.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 เจ…เจคเฉ‡ gin เจฆเฉ‹เจตเฉ‡เจ‚ เจนเจจ, เจชเจฐ เจ…เฉฐเจ•เฉœเจฟเจ†เจ‚ เจ…เจจเฉเจธเจพเจฐ เจ‡เจน เจชเจคเจพ เจšเจฒเจฆเจพ เจนเฉˆ เจ•เจฟ 10% เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‚เจœเฉ‡ เจฌเจฒเจพเจ• เจฆเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจฆเฉ€เจ†เจ‚ เจนเจจ. เจญเจพเจต, เจ•เฉฐเจฎ เจฒเจˆ เจชเจนเจฟเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจœเจพเจฃเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจ–เจพเจธ เจธเฉ€เจฎเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจธเจฐเจตเจฐ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ€ เจ•เฉเฉฑเจฒ เจ–เจชเจค เจจเฉ‚เฉฐ เจฒเจ—เจญเจ— เจ‡เฉฑเจ• เจนเจœเจผเจพเจฐ เจ—เฉเจฃเจพ เจ˜เจŸเจพเจ‰เจฃ เจฆเฉ‡ เจฏเฉ‹เจ— เจธเฉ€!

1.5*: เจ…เจธเฉ€เจ‚ เจฌเจฟเจจเจพเจ‚ เจซเจพเจˆเจฒ เจฆเฉ‡ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚

เจ‰เฉฑเจชเจฐ LIKE เจธเจพเจจเฉ‚เฉฐ เจ—เจฒเจค เจ›เจพเจ‚เจŸเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฐเฉ‹เจ•เจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค เจชเจฐ เจ‡เจธเจจเฉ‚เฉฐ USING เจ†เจชเจฐเฉ‡เจŸเจฐ เจจเฉ‚เฉฐ เจจเจฟเจธเจผเจšเจฟเจค เจ•เจฐเจ•เฉ‡ "เจธเจนเฉ€ เจฎเจพเจฐเจ— 'เจคเฉ‡ เจธเฉˆเฉฑเจŸ" เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ‡เจน เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ ASC. เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจงเจพเจฐเจพ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ–เจพเจธ เจฒเฉœเฉ€เจฌเฉฑเจง เจ“เจชเจฐเฉ‡เจŸเจฐ เจฆเจพ เจจเจพเจฎ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ USING. เจฒเฉœเฉ€เจฌเฉฑเจง เจ†เจชเจฐเฉ‡เจŸเจฐ เจฌเฉ€-เจŸเฉเจฐเฉ€ เจ“เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจฆเฉ‡ เจ•เฉเจ เจชเจฐเจฟเจตเจพเจฐ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจœเจพเจ‚ เจตเฉฑเจง เจฆเจพ เจฎเฉˆเจ‚เจฌเจฐ เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค ASC เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจฐเจพเจฌเจฐ USING < ะธ DESC เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจฌเจฐเจพเจฌเจฐ USING >.

เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, "เจ˜เฉฑเจŸ" เจนเฉˆ ~<~:

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

PostgreSQL เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"
[explanation.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 เจฌเฉ‡เจธเจฎเจ เจ…เจคเฉ‡ เจฌเฉ‡เจฐเจนเจฟเจฎ เจนเฉˆ

เจ•เจฟเจคเฉ‡ เจฆเฉ‚เจœเฉ€ เจธเจฌเจ•เจตเฉ‡เจฐเฉ€ เจคเฉ‹เจ‚ เจ…เจœเจฟเจนเฉ‡ เจตเจฟเจ•เจพเจธ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจตเจฟเฉฑเจš เจ—เฉเฉฐเจฎ เจนเฉ‹ เจ—เจฟเจ† NOT LIKE เจธเจผเจฐเจค. เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ UNION ALL เจตเจพเจชเจธ เจ†เจ‰เจฃเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจ•เฉเจ เจ‡เฉฐเจฆเจฐเจพเจœเจผ เจฆเฉ‹ เจตเจพเจฐ - เจชเจนเจฟเจฒเจพเจ‚ เจฒเจพเจˆเจจ เจฆเฉ‡ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจชเจพเจ‡เจ† เจ—เจฟเจ†, เจ…เจคเฉ‡ เจซเจฟเจฐ เจฆเฉเจฌเจพเจฐเจพ - เจ‡เจธ เจฒเจพเจˆเจจ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจธเจผเจฌเจฆ เจฆเฉ‡ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจšเฅค เจธเฉ€เจฎเจพ เจตเจฟเฉฑเจš, เจฆเฉ‚เจœเฉ€ เจธเจฌเจ•เจตเฉ‡เจฐเฉ€ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฐเจฟเจ•เจพเจฐเจก เจชเจนเจฟเจฒเฉ‡ เจฆเฉ‡ เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจ‡เฉฑเจ• เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ•เจพเจฐเจจ เจฒเฉฑเจญเจฃ เจฆเฉ€ เจฌเจœเจพเจ เจ•เฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ?... เจ•เฉ‹เจˆ เจธเจตเจพเจฒ เจจเจนเฉ€เจ‚!

  • เจ†เจ•เจพเจฐ เจจเฉ‚เฉฐ เจฆเฉเฉฑเจ—เจฃเจพ เจ…เจธเจฒเฉ€ เจจเจฎเฉ‚เจจเฉ‡
  • 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>;

เจญเจพเจต, เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจนเฉˆ เจ•เจฟ เจจเจคเฉ€เจœเจพ, เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจฌเจฟเจฒเจ•เฉเจฒ เจ‰เจนเฉ€ เจนเฉˆ, เจชเจฐ 2nd CTE เจธเจฌเจ•เจตเฉ‡เจฐเฉ€ เจตเจฟเฉฑเจš "เจ‰เฉฑเจกเจฃ" เจฆเฉ€ เจธเฉฐเจญเจพเจตเจจเจพ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจนเฉ‹ เจ—เจˆ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚ เจตเฉ€, เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจชเฉœเฉเจนเจจเจฏเฉ‹เจ—.

เจชเจฐ เจ‡เจน เจธเจญ เจคเฉ‹เจ‚ เจฆเฉเจ–เจฆเจพเจˆ เจ—เฉฑเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆ. เจ•เจฟเจ‰เจ‚เจ•เจฟ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจจเฉ‡ เจšเฉเจฃเจจ เจฒเจˆ เจ•เจฟเจนเจพ เจนเฉˆ DISTINCT เจ–เจพเจธ เจฒเฉ‹เจ•เจพเจ‚ เจฒเจˆ เจจเจนเฉ€เจ‚, เจชเจฐ เจ‡เฉฑเจ• เจตเจพเจฐ เจตเจฟเฉฑเจš เจธเจพเจฐเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฒเจˆ เจฐเจฟเจ•เจพเจฐเจก, เจซเจฟเจฐ เจธเจฌ_เจ•เจตเฉ‡เจฐเฉ€ เจซเฉ€เจฒเจก โ€” เจธเจฌเจ•เจตเฉ‡เจฐเฉ€ เจฆเจพ เจจเจคเฉ€เจœเจพ โ€” เจ‰เฉฑเจฅเฉ‡ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ•เจฒเฉ€ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจนเฉเจฃ, เจšเจฒเจพเจ‰เจฃ เจฒเจˆ DISTINCT, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจšเจฒเจพเจ‰เจฃเจพ เจธเฉ€ 10 เจธเจฌเจ•เจตเฉ‡เจฐเฉ€เจ†เจ‚ เจจเจนเฉ€เจ‚, เจชเจฐ เจธเจพเจฐเฉ€เจ†เจ‚ <2 * N> + 10!

2.4: เจธเจญ เจคเฉ‹เจ‚ เจ‰เฉฑเจชเจฐ เจธเจนเจฟเจฏเฉ‹เจ—!

เจ‡เจธ เจฒเจˆ, เจกเจฟเจตเฉˆเจฒเจชเจฐ เจฐเจนเจฟเฉฐเจฆเฉ‡ เจธเจจ - เจ‰เจนเจจเจพเจ‚ เจจเฉ‡ เจชเจฐเฉ‡เจธเจผเจพเจจ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ•เฉ‹เจฒ เจธเจชเฉฑเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจนเจฐเฉ‡เจ• เจ…เจ—เจฒเฉ‡ "เจชเฉฐเจจเฉ‡" เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เฉฐเจญเฉ€เจฐ เจฎเฉฐเจฆเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจฃ N เจฎเฉเฉฑเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจจเฉ‚เฉฐ "เจ…เจกเจœเจธเจŸ" เจ•เจฐเจจ เจฒเจˆ เจ•เจพเจซเจผเฉ€ เจงเฉ€เจฐเจœ เจจเจนเฉ€เจ‚ เจธเฉ€เฅค

เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจตเจฟเจญเจพเจ— เจฆเฉ‡ เจกเจฟเจตเฉˆเจฒเจชเจฐ เจ‰เจจเฉเจนเจพเจ‚ เจ•เฉ‹เจฒ เจจเจนเฉ€เจ‚ เจ†เจ‰เจ‚เจฆเฉ‡ เจ…เจคเฉ‡ เจ…เจœเจฟเจนเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจขเฉฐเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจธเจจ เจฆเฉเจนเจฐเจพเจ“ เจ–เฉ‹เจœ เจฒเจˆ - เจญเจพเจต, เจ…เจธเฉ€เจ‚ เจ•เฉเจ เจจเจฎเฉ‚เจจเฉ‡ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจŸเฉเจ•เฉœเจพ เจฒเฉˆเจ‚เจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธ เจจเฉ‚เฉฐ เจตเจพเจงเฉ‚ เจธเจผเจฐเจคเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจจเจคเฉ€เจœเจพ เจ–เจฟเฉฑเจšเจฆเฉ‡ เจนเจพเจ‚, เจซเจฟเจฐ เจ…เจ—เจฒเจพ เจŸเฉเจ•เฉœเจพ (เจœเฉ‹ เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš N เจจเฉ‚เฉฐ เจตเจงเจพ เจ•เฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ), เจ…เจคเฉ‡ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ‰เจฆเฉ‹เจ‚ เจคเฉฑเจ• เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ• เจ…เจธเฉ€เจ‚ เจธเจ•เฉเจฐเฉ€เจจ เจจเจนเฉ€เจ‚ เจญเจฐเจฆเฉ‡เฅค

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, เจซเฉœเฉ‡ เจ—เจ เจจเจฎเฉ‚เจจเฉ‡ เจตเจฟเฉฑเจš N เจฒเจ—เจญเจ— 17K เจฆเฉ‡ เจฎเฉเฉฑเจฒเจพเจ‚ 'เจคเฉ‡ เจชเจนเฉเฉฐเจš เจ—เจฟเจ†, เจ…เจคเฉ‡ เจ•เฉ‡เจตเจฒ เจ‡เฉฑเจ• เจฆเจฟเจจ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ 4K เจ…เจœเจฟเจนเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ "เจธเฉฐเจ—เฉ€เจค เจฆเฉ‡ เจจเจพเจฒ" เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€เฅค เจ‰เจจเฉเจนเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ†เจ–เจฐเฉ€ เจจเฉ‚เฉฐ เจฆเจฒเฉ‡เจฐเฉ€ เจจเจพเจฒ เจธเจ•เฉˆเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจธเฉ€ เจชเฉเจฐเจคเฉ€ เจฆเฉเจนเจฐเจพเจ“ 1GB เจฎเฉˆเจฎเฉ‹เจฐเฉ€...

เจ•เฉเฉฑเจฒ

PostgreSQL เจเจ‚เจŸเฉ€เจชเฉˆเจŸเจฐเจจเจœเจผ: เจจเจพเจฎ เจฆเฉเจ†เจฐเจพ เจ–เฉ‹เจœ เจฆเฉ‡ เจฆเฉเจนเจฐเจพเจ เจธเฉเจงเจพเจฐ เจฆเฉ€ เจ•เจนเจพเจฃเฉ€, เจœเจพเจ‚ "เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจ…เฉฑเจ—เฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒเจคเจพ"

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹