Điểm:0

Tại sao truy vấn tìm kiếm đơn giản của tôi quá chậm?

lá cờ ru

Tôi không biết tại sao việc tìm kiếm trong bảng "các thành phố" của mình lại quá chậm. Truy vấn của tôi đang tìm kiếm một bảng "các thành phố" nằm cách thành phố khoảng 25 km. Tôi sử dụng truy vấn đơn giản này và cơ sở dữ liệu mất gần 20 giây để trả về kết quả.

CHỌN city_destination,khoảng cách TỪ các thành phố WHERE city_start='Wien' VÀ khoảng cách <= 25 ĐẶT HÀNG THEO khoảng cách ASC

Công cụ bảng là InnoDB. Bảng có khoảng. 7 triệu hàng:

+---------------------+-------------+------+------+- --------+----------------+
| Lĩnh vực | Loại | Không | Chìa khóa | Mặc định | Thêm |
+---------------------+-------------+------+------+- --------+----------------+
| id | int(11) | KHÔNG | PRI | NULL | auto_increment |
| id_of_start | int(11) | KHÔNG | | NULL | |
| id_of_destination | int(11) | KHÔNG | | NULL | |
| thành_phố | văn bản | KHÔNG | | NULL | |
| thành_phố | văn bản | KHÔNG | | NULL | |
| khoảng cách | gấp đôi | KHÔNG | | NULL | |
+---------------------+-------------+------+------+- --------+----------------+

Ai đó có thể tư vấn cho tôi cách tối ưu hóa cơ sở dữ liệu hoặc truy vấn không?

Điểm:0
lá cờ st

Đối với truy vấn này, bạn phải sử dụng chỉ mục cho city_start + distance

TẠO CHỈ SỐ idx_city_start_ distance BẬT các thành phố (city_start, distance);

Bạn cũng có thể tạo hai chỉ mục: city_start và một chỉ mục khác cho khoảng cách. Điều đó sẽ làm việc tốt là tốt.

Sahasrar avatar
lá cờ ru
Nó hoạt động, cảm ơn bạn. Tôi cũng có một mẹo để thay đổi công cụ lưu trữ thành MyISAM và thời gian truy vấn giống với InnoDB với Index.... Đó cũng là cách phải không? hoặc đó không phải là cách hay để tạo DB cho giải pháp này?
lá cờ st
@Sahasrar, InnoDB cho phép bạn sử dụng RÀNG BUỘC và xử lý ROW LOCK, có nghĩa là InnoDB là lựa chọn tốt hơn nếu bảng của bạn xử lý khối lượng lớn hơn hoặc CẬP NHẬT và/hoặc XÓA. MyISAM cho phép các CHÈN và CHỌN đồng thời, đây có thể là lựa chọn tốt hơn nếu bảng của bạn xử lý tải số lượng lớn CHÈN và rất ít CẬP NHẬT hoặc XÓA
Sahasrar avatar
lá cờ ru
Bảng này si về tìm kiếm các thành phố gần nhất. Vì vậy, 99% truy vấn sẽ là về việc đọc. Từ nhận xét của bạn, tôi nghĩ rằng bảng của tôi sử dụng MyISAM sẽ tốt hơn, tôi có sai không?
lá cờ st
@Sahasrar, điều đó có ý nghĩa. Tôi sẽ chọn MyISAM trong trường hợp này

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.