Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 5 Dołączył: 23.10.2006 Skąd: Gda?sk Ostrzeżenie: (0%)
|
Witam!
Mam tabele fields o nastepujacej strukturze i okolo 2mln wierszy: id(int), document_id(int), name(varchar), value(text) index(document_id, name, id) W tabeli trzymane sa nazwy pol i ich wartosci z refem do dokumentu. Dokument ma tak jakby wersje, pole jest edytowane poprzez wstawienie wiersza o refie do tego samego dokumentu z ta sama nazwa. czyli jesli mam wiersz: 1 | 1 | imie | adrian i wstawiam 2 | 1 | imie | marek to znaczy ze wyedytowalem dokument '1' i zmienilem wartosc pola imie z adrian na marek. aktualne wartosci dla poszczegolnych pol jestem w stanie wyciagnac bardzo szybko dzieki indexowi (0.07 s):
ale kiedy chce przeszukac wyniki po value zapytaniem:
to wykonanie trwa juz okolo 15s. Ma ktos jakis pomysl?? bo mi sie juz wyczerpaly (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) pozdrawiam adrian Ten post edytował abusiek 8.12.2008, 23:49:43 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 89 Pomógł: 5 Dołączył: 23.10.2006 Skąd: Gda?sk Ostrzeżenie: (0%)
|
distinct dla mysql jest wolniejszy niz group by.
Poza w podzapytaniu wybierajacym ostatnie wartosci dla kazdego pola, kazdego dokumentu, czyli
jest zastosowany tight scan, dzieki temu ze na tabeli zalozony jest index (documentId, name, id) i to zapytanie zwraca wyniki w 0.07s wiec watpie zeby dalo sie szybciej. Wg mnie problem tkwi w tym ze jesli majac juz teraz te ostatnie wersje kazdego chce sprawdzic czy sa wsrod nich takie z value like '%234%' musze jeszcze raz dolaczyc tabale i po niej szukac, czyli napisac cos takiego --> czas wykonania to 0.05s teraz z jednej strony mam zbior idikow pol w ostatniej wersji z drugiej zbior idikow pol ktore w value kiedys tam (moze obecnie) maja 123. Wyciagniecie czesci wspolnej tych dwoch zbiorow czyli fieldow ktore aktualnie maja w wartosci 123 zajmuje tyle czasu. Jak zagladam w logi mysql-a to okazuje sie ze jedna z tabel jest kopiowana na dysk jako tabela tymczasowa i to raczej trzeba optymalizowac tylko problem w tym ze juz nie mam pomyslu jak, bo probowalem chyba kazdej znanej mi skladni... Ten post edytował abusiek 9.12.2008, 12:28:00 |
|
|
|
abusiek mysql, wolno dzialajace zapytanie 8.12.2008, 15:35:18
phpion Spróbuj założyć 2-kolumnowy indeks na kolumny name... 8.12.2008, 17:14:07
abusiek Dzieki za odpowiedz
Niestety wyniki nie poprawi... 8.12.2008, 23:54:30
sowiq Sposób:[SQL] pobierz, plaintext SELECT * FROM tabe... 9.12.2008, 00:03:58
abusiek Mozna by bylo to zapytanie zlozyc tak, ale ono wte... 9.12.2008, 00:40:13
Riklaunim baza danych nie służy do wyszukiwania. Zapytania z... 9.12.2008, 08:49:58
abusiek tutaj nie jest problemem like bo to zapytanie ktor... 9.12.2008, 10:23:33
sowiq Jak napisałem powyżej - GROUP BY może znacząco wyd... 9.12.2008, 10:36:35 ![]() ![]() |
|
Aktualny czas: 23.12.2025 - 04:10 |