Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tại sao hiệu suất của các truy vấn MySQL rất kém khi sử dụng chỉ mục CHAR / VARCHAR?

Rõ ràng, vấn đề là truy vấn đang thực hiện quét chỉ mục. Cách tiếp cận thay thế sẽ là thực hiện hai lần tra cứu chỉ mục, cho các giá trị đầu tiên và giá trị cuối cùng giống nhau, sau đó sử dụng thông tin meta trong chỉ mục để tính toán. Dựa trên quan sát của bạn, MySQL thực hiện cả hai.

Phần còn lại của câu trả lời này là suy đoán.

Lý do khiến hiệu suất "chỉ" chậm hơn 300 lần, thay vì chậm hơn 200.000 lần, là do chi phí đọc chỉ mục. Trên thực tế, việc quét các mục nhập diễn ra khá nhanh so với các thao tác cần thiết khác.

Có một sự khác biệt cơ bản giữa số và chuỗi khi so sánh. Công cụ chỉ có thể nhìn vào biểu diễn bit của hai số và nhận biết chúng giống nhau hay khác nhau. Thật không may, đối với chuỗi, bạn cần phải tính đến mã hóa / đối chiếu. Tôi nghĩ đó là lý do tại sao nó cần phải xem xét các giá trị.

Có thể là nếu bạn có 216.000 bản sao chính xác cùng một chuỗi, thì MySQL sẽ có thể thực hiện đếm bằng siêu dữ liệu trong chỉ mục. Nói cách khác, trình lập chỉ mục đủ thông minh để sử dụng siêu dữ liệu để so sánh bình đẳng chính xác. Tuy nhiên, nó không đủ thông minh để tính đến việc mã hóa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.lang.AbstractMethodError:com.mysql.jdbc.PreparedStatement.setBlob (ILjava / io / InputStream;) V

  2. Chọn các hàng duy nhất, theo giá trị trong cột phụ

  3. kích hoạt tài khoản php / mysql

  4. Vi phạm ràng buộc toàn vẹn:1048 Cột 'user_id' không được để trống xảy ra khi gán vai trò (Laravel 5.3)

  5. Coalesce tương đương cho giá trị thứ n không null - MySQL