Мазмунга өтүү

Индекстөөнүн өнүккөн стратегиялары

Сабактын башталышы

Индекстөөнүн өнүккөн стратегиялары

"Кайсы тилкени индекстейм?" деген суроодон "оптимизатор чындыгында кайсы индексти колдонот жана эмне үчүн?" деген суроого

Негизги идея: Бир тилкелүү индекс оңой. Чыныгы чеберчилик - индекстерди оптимизатор колдоно ала тургандай куроо: курама индекстеги тилкелердин тартиби кайсы сурамдарды тездетээрин чечет, жаап турган индекс сурамга таблицага такыр кайрылбоого мүмкүндүк берет, ал эми туура эмес жазылган предикат бар индексти байкатпай өчүрүп коё алат. Бул сабак сурам менен индексти бирге иштегендей жазуу жөнүндө.
Сабактын аягында сиз:
  • курама индексти долбоорлоп, эң сол префикс эрежесин колдоно аласыз,
  • сурам индекс боюнча гана сканерлөө катары иштеши үчүн жаап турган индекс түзө аласыз,
  • селективдүүлүк жөнүндө ой жүгүртүп, оптимизатор эмне үчүн кээде индексти этибарга албашын түшүнөсүз,
  • MySQL 8дө функционалдык (туюнтма боюнча) индексти колдоносуз,
  • индексти өлтүргөн саргируемый эмес предикаттарды таап, кайра жаза аласыз.

Бул өнүккөн курс: B-дарак индекси издөө менен диапазондук сканерлөөнү тездетээрин, InnoDBде PRIMARY KEY кластердик индекс экенин жана EXPLAIN планын кантип окууну сиз мурунтан билесиз. Биз түз ушунун үстүнө курабыз.

0. Мисал маалымат базасы

Төмөндөгү бардык сурамдар бир кичинекей дүкөн схемасына каршы иштейт. Ар бир таблицада миллиондогон сап бар деп элестетиңиз - индекстөө чоң көлөмдө гана мааниге ээ - бирок жыйынтыктар окумдуу болуш үчүн бир нече сапты гана көрсөтөбүз.

CREATE TABLE customers (
  customer_id INT PRIMARY KEY,
  last_name   VARCHAR(50),
  first_name  VARCHAR(50),
  city        VARCHAR(50),
  email       VARCHAR(120)
);

CREATE TABLE orders (
  order_id    INT PRIMARY KEY,
  customer_id INT,
  order_date  DATE,
  status      VARCHAR(20),
  total       DECIMAL(10,2)
);

INSERT INTO customers VALUES
  (1,'Smith','Anna','Berlin','anna@shop.io'),
  (2,'Smith','Ben','Berlin','ben@gmail.com'),
  (3,'Jones','Cara','Almaty','cara@mail.kg'),
  (4,'Adams','Dan','Berlin','dan@gmail.com');

INSERT INTO orders VALUES
  (10,1,'2024-02-11','shipped', 42.00),
  (11,1,'2024-03-02','shipped', 18.50),
  (12,2,'2024-02-20','pending', 99.00),
  (13,3,'2023-12-30','shipped',  7.25),
  (14,4,'2024-05-05','cancelled',60.00);

Эки таблица, бирден-көпкө байланыш (orders.customer_id дегени customers.customer_idге шилтейт) жана абдан ар түрдүү селективдүүлүктөгү тилкелер: statusта бир нече гана маани, email болсо дээрлик уникалдуу. Экөө тең төмөндө маанилүү.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө