Sorguyu optimize yardıma ihtiyacınız var

0 Cevap php

İki tablo var - incoming tours(id,name) ve incoming_tours_cities(id_parrent, id_city)

id ilk tablodaki benzersiz ve ilk tablodan benzersiz her satır için id_city listesi var - (ikinci tabloda sn yani id_parrent ikinci tabloda eşittir id ilk tablodan)

Örneğin

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-----|
........................

İşte first_tour şehirlerin listesi var demektir - ("4","5","27","74")

VE second_tour şehirler listesi var - ("1","5")


En i iki değer olduğunu varsayalım - 4 ve 74:

Şimdi, benim both değerleri şehirleri listesinde olan ilk tablodan tüm satırları almak gerekiyor. yani dönmelidir sadece first_tour (4 ve 74 o şehirlerin listesi var çünkü)

Yani, ben aşağıdaki sorguyu yazdı

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'

Ve bu gayet iyi çalışıyor.

Ama dinamik sorgu oluşturmak ve birleştirme sayısı büyük olduğunda (yaklaşık 15) sorgu yavaşlıyor.

i çalıştırmayı denediğinizde, yani zaman

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'

Sorgu (i tablolarda dizinler sette rağmen) 45s içinde çalışma'nın

I optimaze için, ne yapabilirim?

Çok teşekkürler

0 Cevap