EXPLAIN აჩვენებს გეგმას, რომელიც optimizer-მა აირჩია — როგორ მიუწვდება ხელი თითოეულ ცხრილს — მოთხოვნის გაშვების გარეშე. მას კითხულობთ იმის დასადასტურებლად, რომ index-ები გამოიყენება და ცოტა სტრიქონი მოწმდება.
EXPLAIN აჩვენებს გეგმას, რომელიც optimizer-მა აირჩია — როგორ მიუწვდება ხელი თითოეულ ცხრილს — მოთხოვნის გაშვების გარეშე. მას კითხულობთ იმის დასადასტურებლად, რომ index-ები გამოიყენება და ცოტა სტრიქონი მოწმდება.
const / eq_ref / ref (index ძებნა, კარგი) → range → index (სრული index სკანირება) → ALL (full table scan, წითელი დროშა).NULL = არცერთი).Using index (covering, შესანიშნავია), Using filesort / Using temporary (დახარისხება/დაჯგუფება მეხსიერებაში ან დისკზე — ხშირად ოპტიმიზირებადი).EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- +------+------+------+---------+--------+----------------+
-- | type | key | rows | Extra |
-- | ALL | NULL | 900k | Using where; Using filesort | <- ყველაფერს სკანირებს, ახარისხებს
-- +------+------+------+---------+--------+----------------+
-- დაამატეთ index, რომელიც ფარავს ფილტრსაც და დახარისხების რიგსაც:
CREATE INDEX idx_cust_created ON orders (customer_id, created_at);
EXPLAIN SELECT * FROM orders WHERE customer_id = 42 ORDER BY created_at;
-- | type | key | rows | Extra |
-- | ref | idx_cust_created | 30 | Using where | <- პოულობს 30 სტრიქონს, filesort-ის გარეშე
Index-მა ALL სკანირება 900 ათასი სტრიქონისა აქცია ref seek-ად 30-ის და, რადგან created_at მეორე სვეტია, სტრიქონები წინასწარ დახარისხებული გამოდის — filesort ქრება.
გამოიყენეთ EXPLAIN ANALYZE (MySQL 8) ასევე ფაქტობრივი დროისა და სტრიქონების რაოდენობის სანახავად, რომ დაიჭიროთ შემთხვევები, სადაც შეფასება არასწორია.
EXPLAIN არის ის, თუ როგორ ცვლით მიხვედრას მტკიცებულებით. type: ALL-ის, უზარმაზარი rows-ის ან Using filesort-ის შემჩნევა ზუსტად გეუბნებათ, სად აკლია index — უსწრაფესი გზა "გვერდი ნელია"-დან მიზნობრივ გამოსწორებამდე.
IT გასაუბრების კითხვების ბიბლიოთეკა დეტალური პასუხებით — Junior-დან Senior-მდე.
შემოწირულობა