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

Truy vấn MySQL chậm khi sử dụng Order By với chức năng tính toán khoảng cách giữa hai điểm (dài, vĩ độ)

Tùy chọn:

  1. Kết hợp sắp xếp trong định nghĩa / logic thủ tục được lưu trữ của bạn. Nếu SQL đang gọi của bạn, hãy chọn trong thủ tục được lưu trữ của bạn, hãy thực hiện sắp xếp và giới hạn ở đó . - Điều này có nghĩa là bạn sẽ không tạo ra 10.000 hàng trong quy trình đã lưu trữ, chỉ sử dụng chúng. Ngoài ra, nếu bảng có chỉ mục, sắp xếp ban đầu trong SQL select có thể nhanh hơn nhiều.

  2. Xác minh rằng lập chỉ mục được sử dụng trong bảng của bạn. - Các chỉ mục sẽ làm cho việc sắp xếp của bạn được thực hiện nhanh hơn khi chọn trên bảng.

Vui lòng cung cấp cho chúng tôi định nghĩa hàm, việc trợ giúp thêm cho bạn sẽ dễ dàng hơn.

Cuối cùng, hãy cố gắng di chuyển đơn đặt hàng của bạn theo và giới hạn trực tiếp trong chức năng của bạn thay vì thực hiện chúng sau đó. Hàm của bạn có thể trả về 10 kết quả được sắp xếp trực tiếp và sẵn sàng. Nếu bạn muốn, hãy tạo hai hàm - một hàm trả về kết quả đầy đủ và một hàm trả về giới hạn và sắp xếp.

Cập nhật:

Sau khi nhìn thấy chức năng của bạn, rõ ràng là bạn đang cố gắng sắp xếp theo một giá trị được tính toán. Việc sắp xếp theo các giá trị được tính toán rất chậm như cũng được đề cập trong:

Tôi đang cố gắng nghĩ cách bạn có thể "xử lý trước / đặt hàng" dữ liệu của mình dựa trên col1 hoặc col2 để tăng tốc độ sắp xếp kết quả cuối cùng của bạn. Nếu col1 và col2 là các cột của bảng và funResult là một hàm toán học có thể được vẽ đồ thị một trong hai hàm có ảnh hưởng cao hơn đến giá trị trả về của hàm ....

Cuối cùng, nếu col1 và col2 là các cột của myTable, bạn không cần sử dụng một hàm được lưu trữ mà có thể truy vấn với, nhưng điều này sẽ không tạo ra sự khác biệt lớn ... Vấn đề chính của bạn là sắp xếp theo một hàm được tính toán:

SELECT rowId, ((col1-INPUT_CONST)*2)+(col2*3) AS funResult
FROM myTable
ORDER BY funResult DESC
LIMIT 10

Cập nhật 2:

Sau khi tìm hiểu về vấn đề sắp xếp được tính toán khoảng cách, tôi thấy rằng điều này đã được hỏi và giải quyết rất hiệu quả tại liên kết bên dưới. Liên quan đến việc sắp xếp theo giá trị được tính toán, vì việc sắp xếp theo giá trị được tính toán của bạn vốn dĩ rất chậm. Xem hai liên kết sau để được trợ giúp thêm:

Cuối cùng, câu trả lời gần nhất cho câu trả lời của bạn là: https://stackoverflow.com/a/4180065/1688441



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Máy chủ Ruby on Rails sẽ không khởi động:dyld:liên kết biểu tượng lười biếng không thành công:Không tìm thấy biểu tượng:_mysql_get_client_info

  2. Gửi tệp với người đưa thư đến API Laravel

  3. Tìm nạp MySQL Workbench ... - không thể duyệt qua DB

  4. MySQL Match Fulltext

  5. Kỳ lạ ở mọi nơi