Mysql query otázku o nutnosti a počítať

0

Otázka

V tento dotaz*, I zoznam a zoradiť riadky z "mytableabc" tým, zemepisná šírka, zemepisná dĺžka, rôzne kritériá,... z v blízkosti ďaleko, alebo skóre a jeho práca/výpis dátach a myslím, že jeho dobré/rýchle dostatok!?

select 
round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitude)) * cos(radians(longtitude) - radians('29.123456')) + sin(radians(latitude)) * sin(radians('40.123456')))), (2)) as distance, 
    (match(colone,coltwo) against('searchkeywordabc' in boolean mode)) as score, 
id,colone,coltwo,latitude,longtitude,colthree 
        from mytableabc 
        where (colone='sampleforsomething') 
            and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
                having distance <= 5 order by distance asc limit 0,50

--problém

v rôznych tratiach, a súbory potrebujem len celkový počet count(id) vrátenie prvky s rovnakým kritériá... snažím sa pridať count(id), ale nie je to dáva správne počítať súčet a tiež zoznam liniek, chcem len celkom čísla(ako bežne počítať dotaz robí) údaje line

select 
    count(id), 
round((6371 * acos(cos(radians('40.123456')) * cos(radians(latitude)) * cos(radians(longtitude) - radians('29.123456')) + sin(radians(latitude)) * sin(radians('40.123456')))), (2)) as distance, 
        (match(colone,coltwo) against('searchkeywordabc' in boolean mode)) as score, 
    id,colone,coltwo,latitude,longtitude,colthree 
            from mytableabc 
            where (colone='sampleforsomething') 
                and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
                    having distance <= 5 order by distance asc limit 0,50

--aj tento dotaz bez vzdialenosť/latitude/longtitude kritériá funguje dobre, vracajúci sa len celkový počet... ale musím pridať vzdialenosť dotaz na tento dotaz

select count(id) from mytableabc where (colone='sampleforsomething') and (match(colone,coltwo) against('searchkeywordabc' in boolean mode))

nie som sql expert a áno, ako vidíte, som nepotrebuje. ďakujem.

geolocation mariadb mysql php
2021-11-17 21:58:00
1

Najlepšiu odpoveď

0

Plán A:

Presuňte distance kontroly WHERE doložka. Toto eliminuje potrebu HAVING zatiaľ čo filtrovanie viac, tak, že COUNT nebude nafúknuté.

select  count(*)
    from  mytableabc
    where  (colone='sampleforsomething')
      and  (match(colone,coltwo) against('searchkeywordabc' in boolean mode))
      AND  (6371 * acos(cos(radians('40.123456')) * 
        cos(radians(latitude)) * cos(radians(longtitude) -
        radians('29.123456')) + sin(radians(latitude)) *
        sin(radians('40.123456')))) < 5;

Ja očakávam, že FULLTEXT index sa používa najprv s ďalšími dvoma testy (= a vzdialenosť) zisťujú všetky riadky vrátil z FT vyhľadávania.

Plán B:

Aj naďalej používať HAVING,, ale majú poddotaz. (Toto je pravdepodobne pomalšie.)

2021-11-18 04:19:40

som analýza/benchmark a plán zvolené. ďakujem za rýchlu odpoveď
evet

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................