[MySQL] wyszukanie podobnych rekordow liczbowych

Hori
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 10 cze 2015, o 20:37
Płeć: Mężczyzna
Lokalizacja: Keenaghan

[MySQL] wyszukanie podobnych rekordow liczbowych

Post autor: Hori »

W tabeli mam zestaw pewnych parametrow liczbowych - potrzebuje znalezc rekordy podobne do zestawu zmiennych..

Jedyne co mi przychodzi do glowy to

Kod: Zaznacz cały

select * from table
where par_1 between @p_1* 0.8 and @p_1*1.2
...
and  par_n between @p_n* 0.8 and @p_n*1.2
Ale moze jest bardziej elegancka metoda?
Na obecna chwile mam ponad 500k rekordow, 32 parametry + data/czas wiec zapytanie jak wyzej dla wszystkich 32 between .. and ... moze byc nieco czasochlonne.
Awatar użytkownika
yorgin
Użytkownik
Użytkownik
Posty: 12762
Rejestracja: 14 paź 2006, o 12:09
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 17 razy
Pomógł: 3440 razy

[MySQL] wyszukanie podobnych rekordow liczbowych

Post autor: yorgin »

500k rekordów po 32 zapytania, sporo.

Mam pomysł na nieco inne zapytanie, zdecydowanie bardziej złożone w budowie, ale powinno być nieco sprawniejsze:

Baza:

Kod: Zaznacz cały

Select * from 
 (Select * from table where conditions_1)
 where conditions_2
Kod:

Kod: Zaznacz cały

SELECT * from 
 ( Select * from 
 ( Select * from
 ( Select * from
...
 ( Select * from table where par_32 between between @p_32* 0.8 and @p_32*1.2 )
 where 
 ...
 where par_3 between @p_3* 0.8 and @p_3*1.2)
 where par_2 between @p_2* 0.8 and @p_2*1.2)
 where par_1 between @p_1* 0.8 and @p_1*1.2
Czyli najpierw wybieramy wszystkie rekordy spełniające warunek 32, potem z tych wybranych wszystkie spełniające warunek 31, potem 30, itd. Nie jest to eleganckie w zapisie, ale być może jest szybsze (brak możliwości przetestowania).
Hori
Użytkownik
Użytkownik
Posty: 7
Rejestracja: 10 cze 2015, o 20:37
Płeć: Mężczyzna
Lokalizacja: Keenaghan

[MySQL] wyszukanie podobnych rekordow liczbowych

Post autor: Hori »

mmm.. to trwa jeszcze dluzej.. ale potestuje jak ruch na serwerze spadnie...
Awatar użytkownika
yorgin
Użytkownik
Użytkownik
Posty: 12762
Rejestracja: 14 paź 2006, o 12:09
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 17 razy
Pomógł: 3440 razy

[MySQL] wyszukanie podobnych rekordow liczbowych

Post autor: yorgin »

Tak jak pisałem, trudno mi jest ocenić czasochłonność bez możliwości testowania.

Twoja propozycja z pierwszego posta jest o tyle dobra, że jest bardzo prosta i przejrzysta. Próbowałem chwilę poszperać w sieci, znalazłem tylko modyfikację nieco upraszczającą kod, ale nie jego szybkość.

Może ktoś z większym doświadczeniem pomoże?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[MySQL] wyszukanie podobnych rekordow liczbowych

Post autor: Afish »

Zanim zaczniecie cokolwiek optymalizować, przydałoby się poznać schemat tabeli, dokładne zapytanie, plan wykonania, listę indeksów, aktualny czas wykonywania i pożądany czas. Bez tego można zgadywać, a nie optymalizować.
ODPOWIEDZ