Аткаруу пландарын окуу жана суроо-талаптарды оптималдаштыруу
MySQL сиздин суроону чындыгында кантип аткарарын көрүп, аны тез иштеши үчүн кайра жазыңыз
Негизги идея:
SELECT - бул рецепт эмес, талап. Сиз кайсы саптарды каалаганыңызды сүрөттөйсүз; суроо оптималдаштыргычы аларды кантип алууну чечет - кайсы индексти окуу, скандоо же индекс боюнча издөө жана таблицаларды кайсы тартипте бириктирүү. EXPLAIN бул планды аткаруудан мурун көрсөтөт; EXPLAIN ANALYZE суроону аткарып, чындыгында эмне болгонун билдирет. Аларды окууну үйрөнсөңүз, көпчүлүк жай суроолорду оңдоо айкын болуп калат.
Аягында сиз төмөнкүлөрдү жасай аласыз:
EXPLAINнегизги мамычаларын окуу:type,key,rows,filtered,Extra,- толук таблица скандоону индекс боюнча диапазон скандоодон же бир саптык издөөдөн айырмалоо,
- негизги бириктирүү стратегияларын таануу - ички циклдер жана хеш-бириктирүү,
EXPLAIN ANALYZEменен болжолдуу жана чыныгы сап санын салыштыруу,- жай суроолордун классикалык үлгүлөрүн таап, оңдоо.
0. Мисал схема
Төмөндөгү бардык суроолор бир кичинекей дүкөн маалымат базасында иштейт. Аны бир жолу түзүп, теманын аягына чейин эсте сактаңыз.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(80),
city VARCHAR(60),
created_at DATE
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
status VARCHAR(20),
total DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
INSERT INTO customers VALUES
(1,'Aida','Bishkek','2023-02-10'),
(2,'Bekturs','Osh','2023-05-01'),
(3,'Cholpon','Bishkek','2024-01-20');
INSERT INTO orders VALUES
(10,1,'2024-03-01','paid', 120.00),
(11,1,'2024-03-04','paid', 55.50),
(12,2,'2024-03-04','pending', 80.00),
(13,3,'2024-04-11','paid', 210.00);
Продакшенде эки таблица тең алда канча чоң деп эсептеңиз (миллиондогон заказдар). Кичине мисал натыйжаларды окуй тургандай кылат; чоң масштабда пландар маанилүү.