TungNT (Blue)

tungnt.blue@gmail.com

User Tools

Site Tools


development:database:mysql:su-dung-explain-de-toi-uu-cau-lenh-mysql

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
development:database:mysql:su-dung-explain-de-toi-uu-cau-lenh-mysql [2024/11/11 14:35] – [Cải thiện hiệu năng với EXPLAIN] tungntdevelopment:database:mysql:su-dung-explain-de-toi-uu-cau-lenh-mysql [2024/11/11 14:41] (current) – [Khác] tungnt
Line 437: Line 437:
 Như bạn thấy ở kết quả, số lượng dòng được duyệt đả giảm đáng kể, từ 2,625,810 (219 * 110 * 109) xuống còn 276 (12 * 23), thực sự là một hiệu quả rất đáng ghi nhận. Nếu bạn cố gắng chạy cùng truy vấn, mà không sắp xếp lại từ trước, ngay sau khi thêm chỉ mục, bạn sẽ không thể thấy được số lượng giảm đáng kể như vậy. MySQL không thể sử dụng chỉ mục bởi nó dùng WHERE trong kết quả trả về. Sau khi di chuyển điều kiện vào bên trong UNION, MySQL đã có thể dùng chỉ mục. Điều đó có nghĩa là thêm chỉ mục không phải là đủ, MySWL sẽ không thể dùng được chỉ mục đó trừ khi bạn viết câu truy vấn thích hợp.  Như bạn thấy ở kết quả, số lượng dòng được duyệt đả giảm đáng kể, từ 2,625,810 (219 * 110 * 109) xuống còn 276 (12 * 23), thực sự là một hiệu quả rất đáng ghi nhận. Nếu bạn cố gắng chạy cùng truy vấn, mà không sắp xếp lại từ trước, ngay sau khi thêm chỉ mục, bạn sẽ không thể thấy được số lượng giảm đáng kể như vậy. MySQL không thể sử dụng chỉ mục bởi nó dùng WHERE trong kết quả trả về. Sau khi di chuyển điều kiện vào bên trong UNION, MySQL đã có thể dùng chỉ mục. Điều đó có nghĩa là thêm chỉ mục không phải là đủ, MySWL sẽ không thể dùng được chỉ mục đó trừ khi bạn viết câu truy vấn thích hợp. 
  
-===== Khác =====+====== Khác =====
 + 
 +  * Query bị thiếu index => lúc query nó phải scan rất nhiều data => RAM thiếu dẫn đến IO wait nó cũng tăng theo (độ trễ khi đọc data từ ổ cứng) 
 +  * Sử dụng 1 cột trong DB để đánh partition và cột đó tham gia query luôn. Ví dụ cột approved_time luôn có giá trị thì có thể sử dụng cột đó để đánh partition. Khi approved_time thay đổi thì cơ chế của DB sẽ tự chuyển đổi vị trí lưu theo partition. 
 +  * Loại bỏ index không cần thiết (dung lượng index không nên nhiều hơn dung lượng của data) => SELECT * FROM information_schema.partitions WHERE TABLE_SCHEMA='stg_api_console' AND TABLE_NAME = 'user_transactions' AND PARTITION_NAME IS NOT NULL; => Chỉ số cột: DATA_LENGTH, INDEX_LENGTH 
  
development/database/mysql/su-dung-explain-de-toi-uu-cau-lenh-mysql.1731335700.txt.gz · Last modified: 2024/11/11 14:35 by tungnt

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki