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

MySQL select có vẻ rất chậm nhưng không thể nghĩ cách cải thiện?

Tôi nghĩ rằng có một số vấn đề với truy vấn và bản thân định nghĩa bảng.

  • Table.name là cột ký tự 4K
  • Truy vấn đang sắp xếp theo cột đó

Bạn đang sắp xếp dựa trên một cột mà bạn đang lưu trữ chuỗi. Để sắp xếp theo chuỗi, phải thực hiện so sánh chuỗi. So sánh chuỗi có xu hướng là một hoạt động chậm và, với kích thước của cột bạn đang sử dụng, nó rất có thể gây ra một lần truy cập hiệu suất đáng chú ý.

Chúng tôi không có dấu hiệu về nội dung của name của bạn và có vẻ như khó nghĩ ra một tên thực tế yêu cầu that nhiều ký tự.

Nếu chuỗi này có một số phần dữ liệu khác nhau về mặt khái niệm, có lẽ cột nên được chia thành nhiều cột riêng biệt, nếu có thể và sau đó chuẩn hóa nếu thích hợp.

Nếu bạn có thể chia nội dung của cột đó thành nhiều cột nhỏ hơn và sau đó sử dụng chúng, thì việc so sánh chuỗi, mặc dù vẫn đắt tiền, sẽ 'nhanh hơn' đơn giản vì các chuỗi được so sánh sẽ ngắn hơn đáng kể so với hiện tại.

Một điều khác cần xem xét là liệu bạn có thể tối ưu hóa tìm kiếm bằng cách tránh so sánh chuỗi hoàn toàn hoặc bằng cách tránh các truy vấn sẽ gây ra việc quét toàn bộ bảng mặc dù thực tế là bạn đã xác định các chỉ số.

Đối với điều đó, bạn nên xem xét bằng cách sử dụng explain với truy vấn của mình để bạn có thể hiểu rõ hơn về Kế hoạch Thực thi Truy vấn

Trích dẫn tài liệu (nhấn mạnh của tôi):

Chỉnh sửa 1

Bạn đã làm rõ rằng name của mình cột thực sự dành cho ghi chú của người dùng. Trong trường hợp này, tôi nghĩ bạn nên xem xét những điều sau (trong bổ sung với những gì đã được đề cập):

  1. Đổi tên cột thành một cái gì đó tương ứng với nội dung thực tế của nó
  2. Xóa chỉ mục khỏi cột
  3. Không không sử dụng cột đó để tìm kiếm, sắp xếp hoặc bất kỳ thao tác nào khác ngoài việc chỉ chọn nó để hiển thị (Nó sẽ rất hiếm nếu nó cần được sử dụng cho bất kỳ việc gì khác, IMHO.)
  4. Theo tùy chọn, hãy xem xét việc thay đổi cột thành một text nhập và bạn sẽ không phải lo lắng nhiều về bài luận của người dùng bị cắt ngắn mà không có cảnh báo (trừ khi GUI đã thực thi cùng một giới hạn độ dài đầu vào cho người dùng)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Các ký tự tiếng Nga hiển thị không chính xác

  2. django.db.utils.OperationalError:(2013, Mất kết nối với máy chủ MySQL lúc 'bắt tay:đọc gói giao tiếp i sinh dục', lỗi hệ thống:0)

  3. Làm cách nào để xóa bảng khỏi mysqldump

  4. Cài đặt Neo4j

  5. Làm cách nào để đếm số lần xuất hiện của mỗi ID khóa ngoại trong một bảng?