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

Mysql quá chậm đối với truy vấn đơn giản giữa hai bảng

Trong InnoDB mọi chỉ mục đều chứa khóa chính một cách ngầm định.

Kế hoạch giải thích cho thấy chỉ mục IDX_NOME được sử dụng trên bảng Paziente . DBMS tra cứu tên trong chỉ mục và tìm thấy ID_PAZIENTE trong đó, đó là chìa khóa chúng ta cần để truy cập bảng kia. Vì vậy, không có gì để thêm vào. (Trong một DBMS khác, chúng tôi đã thêm một chỉ mục tổng hợp trên (NOME, ID_PAZIENTE) để điều này xảy ra.)

Sau đó là bảng Analisi cân nhắc. Chúng tôi tìm thấy một bản ghi qua FK_ANALISI_PAZIENTE chứa ID_PAZIENTE được sử dụng để tìm kết quả phù hợp và mặc nhiên là khóa chính ID_ANALISI có thể được sử dụng để truy cập bảng, nhưng điều này thậm chí không cần thiết, vì chúng tôi có tất cả thông tin chúng tôi cần từ chỉ mục. Không có gì còn lại mà chúng ta cần tìm trong bảng. (Một lần nữa, trong một DBMS khác, chúng tôi sẽ thêm một chỉ mục tổng hợp trên (ID_PAZIENTE, ID_ANALISI) để có một chỉ mục bao trùm.)

Vì vậy, những gì xảy ra chỉ đơn thuần là:đọc một chỉ mục để đọc chỉ mục khác để đếm. Hoàn hảo. Không có gì để thêm.

Chúng tôi có thể thay thế COUNT(analisi0_.ID_ANALISI) với COUNT(*) như trước đây chỉ nói "đếm bản ghi trong đó ID_ANALISI không phải là null ", luôn là trường hợp ID_ANALISI là khóa chính của bảng. Vì vậy, sẽ đơn giản hơn để sử dụng cái sau và nói "đếm bản ghi". Tuy nhiên, tôi không mong đợi điều này sẽ tăng tốc truy vấn đáng kể nếu có.

Vì vậy, từ quan điểm truy vấn, không có gì để tăng tốc độ này. Dưới đây là những điều khác mà bạn cần lưu ý:

  • Các bảng được phân vùng? Không, tôi sẽ không thấy lợi ích gì trong việc này. Có thể nhanh hơn nếu truy vấn được thực hiện trong các chuỗi song song, nhưng theo tôi biết, không có thực thi song song trên nhiều phân vùng trong MySQL. (Tôi có thể sai.)
  • Chống phân mảnh các bảng? Không, bản thân các bảng thậm chí không được truy cập trong truy vấn.
  • Điều đó khiến chúng ta phải:Mua phần cứng tốt hơn. (Xin lỗi vì không có lời khuyên nào tốt hơn cho bạn.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập nhiều tệp kết xuất .sql vào cơ sở dữ liệu mysql từ shell

  2. chuyển đổi dấu thời gian mysql thành ngày và giờ thực tế?

  3. Tính chênh lệch thời gian giữa 2 ngày bằng phút

  4. cách lấy id của số nhỏ nhất trong mysql bằng cách sử dụng hàm MIN ()

  5. Nói chung, điều gì nhanh hơn, chuyển qua các tệp hoặc chạy truy vấn SQL LIKE% x% thông qua các đốm màu?