fbpx

Программистууд бид өдөр бүр SELECT, INSERT, UPDATE, DELETE гэх мэт SQL query бичдэг. Гэхдээ энэ нь өгөгдлийн санд очоод яг юу болдог вэ? гэсэн асуултыг төдийлөн гүнзгий боддоггүй.


1. SQL асуулга өгөгдлийн санд хүрэх нь

Таны бичсэн SQL асуулга дараах байдлаар өгөгдлийн санд хүрдэг:

  • Аппликейшн (Backend код)
  • Database driver (JDBC, psycopg2, mysqlclient гэх мэт)
  • Өгөгдлийн сангийн сервер (PostgreSQL, MySQL, Oracle, SQL Server)

Энэ үед асуулга нь энгийн текст хэлбэртэй байна.

SELECT name, email FROM users WHERE age > 18;

2. SQL Parser – Асуулгыг задлан шинжлэх

Өгөгдлийн сан эхлээд таны SQL-ийг parser-аар дамжуулна.

Parser-ийн үүрэг:

  • SQL синтакс зөв эсэхийг шалгах
  • Хүснэгт, багана оршин байгаа эсэхийг шалгах
  • Асуулгыг дотоод бүтэц (parse tree) болгон хувиргах

Алдаа байвал:

ERROR: syntax error at or near "FORM"

3. Query Planner / Optimizer – Хамгийн сайн гүйцэтгэх төлөвлөгөөг сонгох

Ижил үр дүн гаргах олон янзын гүйцэтгэх арга байдаг.

Жишээ нь:

  • Бүх мөрийг уншаад шалгах уу? (Full Table Scan)
  • Индекс ашиглах уу? (Index Scan)
  • Ямар дарааллаар хүснэгтүүдийг холбох вэ? (JOIN order)

Optimizer дараах мэдээлэлд үндэслэн шийдвэр гаргана:

  • Индексүүд
  • Статистик мэдээлэл (мөрийн тоо, тархалт)
  • Өмнөх гүйцэтгэлийн туршлага

Үүний үр дүнд Query Execution Plan үүснэ.


4. Execution Plan – Гүйцэтгэх төлөвлөгөө гэж юу вэ?

Execution Plan гэдэг нь:

“Энэ асуулгыг яг ямар алхмаар гүйцэтгэх вэ?” гэсэн зааварчилгаа

Жишээ (товч):

  1. users_age_idx индексийг ашиглах
  2. age > 18 нөхцөлд тохирох мөрүүдийг олох
  3. name, email багануудыг унших

PostgreSQL дээр:

EXPLAIN SELECT name, email FROM users WHERE age > 18;

5. Query Executor – Асуулгыг бодитоор гүйцэтгэх

Executor нь төлөвлөгөөний дагуу:

  • Диск эсвэл санах ойгоос өгөгдөл уншина
  • Индекс ашиглана
  • JOIN, FILTER, SORT үйлдлүүдийг хийнэ

Энэ үе шатанд:

  • CPU
  • RAM
  • Disk I/O

хамгийн их ашиглагддаг.


6. Cache – Яагаад зарим асуулга маш хурдан байдаг вэ?

Өгөгдлийн сан cache ашигладаг:

  • Data cache – хүснэгтийн өгөгдөл
  • Index cache – индексүүд
  • Query cache (зарим DB-д)

Хэрэв өгөгдөл RAM-д байвал:

Маш хурдан

Хэрэв дискнээс унших шаардлагатай бол:

Удаан


7. Transaction & Lock – Бусад асуулгатай хэрхэн зэрэгцэх вэ?

Олон хэрэглэгч зэрэг асуулга илгээдэг тул:

  • Transaction
  • Lock
  • MVCC (PostgreSQL)

ашиглагдана.

Жишээ:

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
COMMIT;

Энэ үед бусад асуулга хүлээх, эсвэл хуучин өгөгдөл харах боломжтой.


8. Үр дүн буцаах

Эцэст нь:

  • Үр дүнг row-уудаар нь цуглуулна
  • Client руу илгээнэ
  • Аппликейшн объект/JSON болгон хувиргана
[
  {"name": "Bold", "email": "bold@example.com"}
]

SQL асуулга бол зүгээр нэг текст биш. Түүний цаана:

  • Parser
  • Optimizer
  • Execution Plan
  • Cache
  • Transaction

гэсэн нарийн механизм ажиллаж байдаг.

Хэрэв та өгөгдлийн сантай илүү сайн ажиллахыг хүсвэл SQL-ээ бичихээс гадна өгөгдлийн сан дотор юу болж байгааг ойлгох нь хамгийн чухал чадваруудын нэг юм.

Leave a Reply