Puncte:0

De ce interogarea mea simplă de căutare este prea lentă?

drapel ru

Nu știu de ce căutarea în tabelul meu „orașe” este atât de lentă. Interogarea mea caută un tabel „orașe” situat la aproximativ 25 km de oraș. Folosesc această interogare simplă, iar baza de date durează aproape 20 de secunde pentru a returna rezultate.

SELECTAȚI orașul_destinație,distanța FROM orașele WHERE city_start='Wien' ȘI distanța <= 25 ORDEREAȚI BY distanță ASC

Motorul tabelului este InnoDB. Masa are cca. 7 milioane de rânduri:

+--------------------+------------+------+-----+- --------+----------------+
| Câmp | Tip | nul | Cheie | Implicit | Extra |
+--------------------+------------+------+-----+- --------+----------------+
| id | int(11) | NU | PRI | NULL | auto_increment |
| id_of_start | int(11) | NU | | NULL | |
| id_destinație | int(11) | NU | | NULL | |
| oras_start | text | NU | | NULL | |
| oras_destinatie | text | NU | | NULL | |
| distanta | dublu | NU | | NULL | |
+--------------------+------------+------+-----+- --------+----------------+

Poate cineva să mă sfătuiască cum să optimizez o bază de date sau o interogare?

Puncte:0
drapel st

Pentru această interogare, ar trebui să utilizați un index pentru city_start + distance

CREATE INDEX idx_citie_start_distance PE orașe (city_start, distanță);

De asemenea, puteți crea doi indici: city_start și altul pentru distanță. Și asta ar trebui să funcționeze bine.

Sahasrar avatar
drapel ru
Funcționează, mulțumesc. De asemenea, am primit un sfat pentru a schimba motorul de stocare în MyISAM și timpul de interogare este același ca InnoDB cu Index.... Este și așa? sau nu este o modalitate bună de a face DB pentru această soluție?
drapel st
@Sahasrar, InnoDB vă permite să utilizați CONSTRAINȚI și să gestioneze ROW LOCK, ceea ce înseamnă că InnoDB este o alegere mai bună dacă tabelul dvs. procesează un volum mai mare sau ACTUALIZĂRI și/sau ȘTERGERE. MyISAM permite INSERT-uri și SELECT-uri concurente, care ar putea fi o alegere mai bună dacă tabelul dvs. se ocupă de încărcarea INSERT-urilor în masă și de foarte puține ACTUALIZĂRI sau ȘTERGERE
Sahasrar avatar
drapel ru
Acest tabel este despre căutarea celor mai apropiate orașe. Deci, 99% dintre interogări vor fi legate de citire. Din comentariul tău, cred că este mai bine ca masa mea să folosească MyISAM, greșesc?
drapel st
@Sahasrar, asta are sens. Aș alege MyISAM în acest caz

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.