Przyspieszenie wyszukiwania ?
Borgson - 13-11-2006 00:45
Przyspieszenie wyszukiwania ?
Witam serdecznie. Mam nastepujacy problem.
Mamy serwer MySQL 5.0
Problem wyglada nastepujaco: mam tabele table_main , ktora zawiera 1,5 mln rekordow i pola 2 wazne dla mnie : pole1, pole2. Pierwsze to pole varchar 255, drugie to pole Text.
Teraz tak, pole1 moze przyjac jedna z 8000 wartosci, takze mam w tym miejscu zalozony index (b drzewo chyba)
Pole2 to Text i jest od 400B do 1KB.
Druga tabela ma 122 rekordy i teraz tak. Dla kazdego z tych 122 rekordow sprawdzam pierwsza tabele i szukam w pole2 wartosci z pierwszej tabeli, jezeli znajde to wpisuje do nowej tabeli pole1 z 1 tabeli i id rekordu z 2 tabeli. Niestety to zapytanie dziala strasznie wolno :(
Ostatnio jak odpalilem strone ktora miala to wykonac zautomatyzowane zadanie dla 1,5 mln rekordow to zrezygnowalem po 30 minutach :(
Nie wiem jak to inaczej ugryzc,
aha, zalozylem index pelnotekstowy na pole2 ale to tylko pogorszylo sprawe :( Chyba ze robie cos zle.
Ponizej moje komendy : "INSERT INTO ww1_231006_small (`datetime`,`datehour`,`cs-uri-stem`, `time-taken`) SELECT t.`datetime`, t.`datehour`, t.`cs-uri-stem`, t.`time-taken` FROM ww1_231006_main AS t WHERE t.`cs(cookie)` LIKE '%username%';"
SELECT `datetime`,`datehour`,`cs-uri-stem`,`time-taken` FROM ww1_231006_main WHERE MATCH (`cs(cookie)`) AGAINST ('%username%');
Prosze o wszelka pomoc.
Pozdrawiam, Piotr
Mikolaj Rydzewski - 13-11-2006 00:45
Borgson <mrquesti@wp.pl> wrote:
> Ponizej moje komendy : > "INSERT INTO ww1_231006_small (`datetime`,`datehour`,`cs-uri-stem`, > `time-taken`) SELECT t.`datetime`, t.`datehour`, t.`cs-uri-stem`, > t.`time-taken` FROM ww1_231006_main AS t WHERE t.`cs(cookie)` LIKE > '%username%';"
Tak na pierwszy rzut oka to pozbadz sie like '%username%' bo to najlepszy sposob na zarzniecie bazy wlasnie.
-- Mikolaj Rydzewski <miki@ceti.pl> http://ceti.pl/~miki/ PGP KeyID: 8b12ab02 There are three kinds of people: men, women, and unix.
Filip Rembiałkowski - 13-11-2006 00:45
Borgson napisał(a):
> mam tabele table_main , ktora zawiera 1,5 mln rekordow i pola 2 wazne > dla mnie : > pole1, pole2. Pierwsze to pole varchar 255, drugie to pole Text. > > Teraz tak, pole1 moze przyjac jedna z 8000 wartosci, takze mam w tym > miejscu zalozony index (b drzewo chyba)
jeśli to stały zbiór wartości to zmień typ na ENUM. wiele rzeczy będzie szybciej działać.
Paweł Matejski - 13-11-2006 00:46
Borgson wrote: > Witam serdecznie. > Mam nastepujacy problem. > > Mamy serwer MySQL 5.0 > > Problem wyglada nastepujaco: > mam tabele table_main , ktora zawiera 1,5 mln rekordow i pola 2 wazne > dla mnie : > pole1, pole2. Pierwsze to pole varchar 255, drugie to pole Text. > > Teraz tak, pole1 moze przyjac jedna z 8000 wartosci, takze mam w tym > miejscu zalozony index (b drzewo chyba) > > Pole2 to Text i jest od 400B do 1KB. > > Druga tabela ma 122 rekordy i teraz tak. > Dla kazdego z tych 122 rekordow sprawdzam pierwsza tabele i szukam w > pole2 wartosci z pierwszej tabeli, jezeli znajde to wpisuje do nowej > tabeli pole1 z 1 tabeli i id rekordu z 2 tabeli. > Niestety to zapytanie dziala strasznie wolno :( > > Ostatnio jak odpalilem strone ktora miala to wykonac zautomatyzowane > zadanie dla 1,5 mln rekordow to zrezygnowalem po 30 minutach :( > > Nie wiem jak to inaczej ugryzc, > > aha, zalozylem index pelnotekstowy na pole2 ale to tylko pogorszylo > sprawe :( > Chyba ze robie cos zle.
Tu piszesz pole1, pole2, a niżej ich jakoś nie widzę.
> Ponizej moje komendy : > "INSERT INTO ww1_231006_small (`datetime`,`datehour`,`cs-uri-stem`, > `time-taken`) SELECT t.`datetime`, t.`datehour`, t.`cs-uri-stem`, > t.`time-taken` FROM ww1_231006_main AS t WHERE t.`cs(cookie)` LIKE > '%username%';" > > SELECT `datetime`,`datehour`,`cs-uri-stem`,`time-taken` FROM > ww1_231006_main WHERE MATCH (`cs(cookie)`) AGAINST ('%username%');
cs(cookie) to pole z () w nazwie?
-- P.M.
Borgson - 13-11-2006 00:46
> Tak na pierwszy rzut oka to pozbadz sie like '%username%' bo to > najlepszy sposob na zarzniecie bazy wlasnie.
no niestety właśnie muszę przeszukać to pole i właśnie niestetyw taki sposób :(
> jeśli to stały zbiór wartości to zmień typ na ENUM. > wiele rzeczy będzie szybciej działać.
Zaraz tego spróbuję, wielkie dzięki, mam nadzieję że pomoże :]
> Tu piszesz pole1, pole2, a niżej ich jakoś nie widzę.
pole1 i pol2 były pomocniczym opisie nazwy pola ... z resztą nazwa pola nie ma nic do rzeczy do wyszukiwania więc nie za bardzo widze w jaki sposób twoje pytania mogą mi pomóc :/ ?
> cs(cookie) to pole z () w nazwie?
Jakie to ma znaczenie :) ?
Dzieki i pozdrawiam, Piotr
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] Wyszukanie =?ISO-8859-2?Q?rekord=F3w=28powiazane_tabel?==?ISO-8859-2?Q?e=29?=
[MySQL/PHP] Wyszukiwanie rekordu przez kolumnę wskazaną przez zmienną
=?iso-8859-2?Q?[MS_SQL]Najcz=EAsciej_wyszukiwane_frazy?=
Re: [mysql] wyszukiwanie =?ISO-8859-2?Q?ca=B3ych_hasel?=
Oracle SQL Developer - Wyszukiwanie w calej bazie
[PostgreSQL] wyszukiwanie przy sporej ilosci danych
Wyszukiwanie "do daty" w zakresie dat i ID
[MySQL] Dostaję podwójny wynik wyszukiwania. Co jest ?
wyszukiwanie pełnotekstowe full-text - problemy
Zapytanie SQL, wyszukiwanie strony tablicy
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|