Nedir 'nerede' koşul ya da çok küçük sorgular uzun ile daha iyi bir sorgu?

4 Cevap php

Maybe it's a little dumb, but i'm just not sure what is better. If i have to check more than 10k rows in db for existanse, what i'd do?

# 1 - bir sorgu

select id from table1 where name in (smth1,smth2...{till 30k})

# 2 - Birçok sorgular

select id from table1 where name=smth1

Though, perfomance is not the goal, i don't want to go down with mysql either ;) Maybe, any other solutions will be more suitable... Thanks.

gnc: Görev, domain listesini getir yeni tasarruf (db değildir henüz) ve listeden dissappeared olanlar silmektir. Biraz yardımcı olacak, umarım ...

4 Cevap

Yapmanız gereken geçici bir tablo oluşturmak olduğunu, bütün isimleri takın, ve (bir sorgu kullanarak) seçeneğini için bu tabloya karşı katılın.

select id 
from table1 t1
inner join temptable tt on t1.name = tt.name

İkinci gidiş-dönüş gecikmeleri bir sürü verecek şekilde tek bir sorgu büyük olasılıkla daha iyi performans gösterecektir. Ama sizin örnekteki gibi isimleri bir sürü varsa ilk yöntem bir iç sınıra neden olabilir.

Bu durumda geçici bir tabloda adları listesini saklamak ve onunla katılmak için daha iyi olabilir.

Gelecek bağlı olarak benzer şeyler yapmak gerekiyor, database 'strlist_to_table' bir işlev eklemek isteyebilirsiniz. Işlevi girdi bir ayraç karakteri (belki de işlevine geçirilen) tarafından sınırlandırılmış bir metin alalım, bir on-the-fly tablo oluşturmak için sınırlayıcı üzerinde bölünmüş. Sonra kullanabilirsiniz

where in strlist_to_table('smth1|smth2', '|')

ve aynı zamanda SQL enjeksiyon (belki biraz Bobby Tablolar giriş görünür) koruma olsun.

Sadece benim 2 sent ...

Ben senin uygulama tasarımı ne kadar esnek olduğunu emin değilim, ama sonra her sorguda tablo birleştirme, tamamen ayrılmış listesini çıkarmadan içine bakarak ve sadece çok-çok ilişkisi temsil etmek için bir kalıcı üçüncü bir tablo yapmaya değer olabilir.