Tôi có hai bảng - incoming tours(id,name)
và incoming_tours_cities(id_parrent, id_city)
Cần giúp đỡ trong việc tối ưu hóa truy vấn
id
trong bảng đầu tiên là duy nhất, và cho mỗi hàng độc đáo từ bảng đầu tiên có danh sách các id_city
- s trong bảng thứ hai (tức là id_parrent
trong bảng thứ hai là bằng id
từ bảng đầu tiên)
Ví dụ
incoming_tours
|--id--|------name-----|
|---1--|---first_tour--|
|---2--|--second_tour--|
|---3--|--thirth_tour--|
|---4--|--hourth_tour--|
incoming_tours_cities
|-id_parrent-|-id_city-|
|------1-----|---4-----|
|------1-----|---5-----|
|------1-----|---27----|
|------1-----|---74----|
|------2-----|---1-----|
|------2-----|---5-----|
........................
Điều đó có nghĩa rằng first_tour
có danh sách các thành phố - ("4","5","27","74")
VÀ second_tour
có danh sách các thành phố - ("1","5")
Giả sử tôi có hai giá trị - 4
và 74
:
Bây giờ, tôi cần phải nhận tất cả các hàng từ bảng đầu tiên, trong đó cả hai giá trị đều nằm trong danh sách các thành phố. tức là nó phải trả lại chỉ first_tour (vì 4 và 74 trong đó là danh sách các thành phố)
Vì vậy, tôi đã viết các truy vấn sau
SELECT t.name
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc0 ON tc0.id_parrent = t.id
AND tc0.id_city = '4'
JOIN `incoming_tours_cities` tc1 ON tc1.id_parrent = t.id
AND tc1.id_city = '74'
Và đó hoạt động tốt.
Nhưng tôi tạo truy vấn động và khi số lượng kết nối lớn (khoảng 15) truy vấn sẽ chậm lại.
tức là khi tôi cố gắng để chạy
SELECT t.name
FROM `incoming_tours` t
JOIN `incoming_tours_cities` tc0 ON tc0.id_parrent = t.id
AND tc0.id_city = '4'
JOIN `incoming_tours_cities` tc1 ON tc1.id_parrent = t.id
AND tc1.id_city = '74'
.........................................................
JOIN `incoming_tours_cities` tc15 ON tc15.id_parrent = t.id
AND tc15.id_city = 'some_value'
truy vấn chạy trong 45s
(mặc dù trên tôi đặt chỉ số trong bảng)
gì tôi có thể làm, để optimaze nó?
Cảm ơn nhiều
bạn tham gia cùng một bảng 14 lần? –
CÓ, vì tôi phải kiểm tra 14 giá trị. – Simon
nếu có cách khác để đạt hiệu quả tương tự, vui lòng cho tôi biết cách – Simon