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

MySQL:Chọn thực thi truy vấn và thời gian tìm nạp kết quả tăng lên theo số lượng kết nối

Có thể mỗi kết nối đang thực hiện quét toàn bộ bảng của profiles . Hãy cố gắng tránh điều đó. Khi có hàng tá truy vấn xuất hiện trên cùng một bảng, có những ổ khóa khiến InnoDB tự "vấp ngã". Một trong hai kế hoạch này sẽ vừa tăng tốc truy vấn vừa giảm số hàng được chạm vào (do đó giảm khóa). Việc sử dụng chỉ mục "tổng hợp" được đề xuất sẽ tăng tốc độ truy vấn. Nhưng OR cản đường. Tôi thấy có hai thủ thuật để vẫn có chỉ mục xem uniquestring , nhưng tránh một số hoặc tất cả OR .

(      (prfls.uniquestring like 'phk5600dcc%')
   or  (prfls.uniquestring like 'phk5600dcf%')
)

OR khó tối ưu hóa.

Thêm cái này:

INDEX(isconnected, isprofilepresent, uniquestring)

Sau đó ...

Kế hoạch A:

prfls.uniquestring         like 'phk5600dc%' AND  -- note common prefix
(      (prfls.uniquestring like 'phk5600dcc%')
   or  (prfls.uniquestring like 'phk5600dcf%')
)

Điều này giả định rằng bạn có thể tạo tiền tố chung đó.

Kế hoạch B (lần lượt OR thành UNION ):

( SELECT ...
    WHERE prfls.uniquestring like 'phk5600dcc%' AND ...
    LIMIT 450 )
UNION ALL    -- ? You may want DISTINCT, if there could be dups
( SELECT ...
    WHERE prfls.uniquestring like 'phk5600dcf%' AND ...  -- the only diff
    LIMIT 450 )
LIMIT 450   -- yes, again

Kế hoạch A (nếu thiết thực) tận dụng lợi thế của những gì có vẻ như là một giá trị bắt đầu chung. Kế hoạch B hoạt động bất kể, nhưng có lẽ chậm hơn một chút, mặc dù vẫn nhanh hơn nhiều so với kế hoạch ban đầu.

Các lưu ý khác ...

Các chỉ mục trên cờ (trong đó bạn có hai cờ) hầu như không bao giờ được sử dụng. EXPLAIN SELECT ... có thể sẽ cho thấy rằng cả hai đều không được sử dụng. Vui lòng cung cấp EXPLAIN cho bất kỳ SELECT nào điều đó cần thảo luận.

UNIQUE KEY là một KEY , vì vậy không cần chỉ mục dư thừa trên USERID .

limit 450 - Bạn muốn 450 cái nào? Không có ORDER BY , truy vấn được phép cung cấp cho bạn bất kỳ 450. (Tất nhiên, có lẽ điều đó cũng tốt.) (Và ORDER BY có thể sẽ làm chậm truy vấn.)

Các đề xuất của tôi sẽ không "giải quyết" được vấn đề, nhưng chúng sẽ tăng số lượng kết nối trước khi sự chậm lại trở nên đáng chú ý.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tóm tắt quy trình làm việc UTF8 PHP, MySQL

  2. Di chuyển MySQL sang SQL Server

  3. Chọn MAX hoặc Đặt hàng theo Giới hạn 1

  4. Cách đặt Bộ ký tự và đối chiếu của một bảng trong MySQL

  5. Chuỗi trống chèn một số 0, không phải một chuỗi rỗng