Bir müşterinin alt grubuna en yakın müşteriyi almaya çalışıyoruz. SQL'imiz beklendiği gibi çalışır, ancak küçük bir test veritabanı (4,000 müşteri, 50 cust alt kümesi) için bile birkaç saniye sürer ve veritabanı boyutu gibi dramatik bir şekilde artar.SQL'de mesafe hesaplama nasıl geliştirilir
select ... custA data, custB data
from customers custA
left join customers custB on custB.id=
(select custC.id
from customers custC
where custC.id<>custA.id
order by distance(custA.lat,custA.lon,custC.lat,custC.lon) asc limit 1)
where ... custA conditions
mesafe, böylece aynı durumda ya da benzer sadece müşteriler karşılaştırmak için filtrenin çeşit arama ... ya da koyabilirsiniz o isim önerir :) Elbette
tam olarak ne hesaplayan bir fonksiyondur lat veya lon ... vs farklılığı maksimum, ancak sql yapısını geliştirmek için herhangi bir yolu var mı?
Thks
İlk sözdizimi geliştirmemesine rağmen, ilginç bir fikir için teşekkürler. Bunu test ettik ve orjinalinin 1,6 ila 1,8 katı arasında değişiyor ... müşterinin alt kümeleri artacak, ilişki daha da kötüye gidiyor. – DeepButi
Cevabımı düzenledim ve şimdi bir Dizine Eklenmiş Görünüm kullanıyor. Bu durumun sizin durumunuzda kullanılıp kullanılamayacağından emin değilim, ancak sorgunuzu öldüren kişi, sorgunuzu her çalıştırdığınızda müşteriler arasındaki mesafeyi hesaplamak için gereken süredir. indekslenmiş bir görünümle, bu görünüm ilk kez gerçekleştiğinde gerçekleşir. –
Öneriniz için teşekkürler. Bir Postgress veritabanı kullanıyoruz ve en benzer konsept MATERIALIZED bir görünüm olacaktır. Malzeme tabloları, görünüm verileri kaynak tabloları güncellenmedikçe periyodik bir süreçle açıkça yeniden oluşturulmalıdır. Milyonlarca kayıt içerecek şekilde bir üretim sistemindeki tüm görüşü oluşturmak için gereken süreden emin değilsiniz (tüm müşteri masasının kendisi ile çapraz birleştirme). Biz bunu deneyeceğiz. – DeepButi