Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Długi czas zapytania-ilość rekordów
bogdanofnascie
post 29.09.2007, 17:42:38
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.09.2007

Ostrzeżenie: (0%)
-----


Witam exclamation.gif

W tabeli mam ponad 16000 rekordów do których kolejno wykonuje zapytania (UPDATE).
Skrypt wykonujący te 16000 zapytań trwa około godziny i mam pytanie czy jest jakieś sposób aby wykonywało się to szybciej questionmark.gif

Po testach wyszło mi że im wiecej rekordów w tabeli tym dłużej trwa pojedyncze zapytanie.
Raczej nie mogę podzielić tej tablicy na kilka mniejszych :/
Go to the top of the page
+Quote Post
tomeksobczak
post 29.09.2007, 20:00:26
Post #2





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


masz w tabeli indeksy na polach kotrych szukasz?
wklej jakies przyklady, nikt nie zgadnie czemu cos Ci wolno dziala


--------------------
Go to the top of the page
+Quote Post
kris2
post 29.09.2007, 22:12:22
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 15.08.2007

Ostrzeżenie: (0%)
-----


mozesz podzielic na kilka updatow
poniewaz wtedy tranzakcja bedzie mniejsza.
Coraz wiekszy update zajmuje coraz wiecej zasobow poniewaz baza danych musi moc w kazdym momencie zrobic rollback winksmiley.jpg
Go to the top of the page
+Quote Post
nevt
post 29.09.2007, 22:17:40
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


A możesz przybliżyć zapytanie UPDATE ?
Trochę dziwne, że musisz je wywoływać 16000 razy w skrypcie - pokaż je - może uda sie je zooptymalizować...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
bogdanofnascie
post 29.09.2007, 23:02:01
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.09.2007

Ostrzeżenie: (0%)
-----


już się robi Panowie winksmiley.jpg

  1. <?php
  2. $result = mysql_query(
  3. UPDATE ranking7 SET teamID='$teamID',leagueID='$leagueID',teamName='$teamName',arenaCapacity='$capacity',points='$points',wins='$wins',draws='$draws',loses='$loses',gScores='$bs',gLost='$bl',ranq='$ranq',lposition='$lposition',league='$leagueName' WHERE teamID='$teamID'&#092;")
  4. or die("Query failed\");
  5. ?>


zapytanie jak zapytanie, nic skomplikowanego

16k zapytan bo tyle jest zespołów :]

mozesz podzielic na kilka updatow
poniewaz wtedy tranzakcja bedzie mniejsza.



niestety juz wiem ze mi nic to nie da bo np.

zapytanie odnoszace sie do tabeli majacej 128 rekordow trwa około 0.02s a zapytanie do tabeli ktora ma te 16k rekordów trwa już 0.1s, róznica jak widac jest spora

Rekordów 16 384 Długość rekordu ø 82 Rozmiar rekordu ø 93 bajtów

Ten post edytował bogdanofnascie 29.09.2007, 23:08:47
Go to the top of the page
+Quote Post
xarr
post 1.10.2007, 09:16:17
Post #6





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 5.12.2004

Ostrzeżenie: (0%)
-----


A wklej info o tabeli.

Wpisz show create table ranking7;

Ten post edytował xarr 1.10.2007, 09:19:03
Go to the top of the page
+Quote Post
bogdanofnascie
post 1.10.2007, 16:45:54
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.09.2007

Ostrzeżenie: (0%)
-----


CREATE TABLE `ranking7` (\n `ID` int(10) unsigned NOT NULL auto_increment,\n `teamID` int(11) NOT NULL,\n `teamName` text NOT NULL,\n `leagueID` int(8) NOT NULL,\n `arenaCapacity` int(11) NOT NULL,\n `points` int(2) NOT NULL,\n `wins` int(2) NOT NULL,\n `draws` int(2) NOT NULL,\n `loses` int(2) NOT NULL,\n `gScores` int(11) NOT NULL,\n `gLost` int(11) NOT NULL,\n `ranq` int(11) NOT NULL,\n `lposition` int(2) NOT NULL,\n `league` text NOT NULL,\n PRIMARY KEY (`ID`)\n) ENGINE=MyISAM AUTO_INCREMENT=16385 DEFAULT CHARSET=latin2
Go to the top of the page
+Quote Post
tomeksobczak
post 1.10.2007, 16:53:48
Post #8





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


dodaj index na teamID


--------------------
Go to the top of the page
+Quote Post
bogdanofnascie
post 1.10.2007, 17:07:13
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.09.2007

Ostrzeżenie: (0%)
-----


tzn. ? co masz na mysli ? smile.gif
Go to the top of the page
+Quote Post
tomeksobczak
post 1.10.2007, 17:10:54
Post #10





Grupa: Zarejestrowani
Postów: 139
Pomógł: 10
Dołączył: 6.07.2007
Skąd: opole

Ostrzeżenie: (0%)
-----


http://dev.mysql.com/doc/refman/5.0/en/create-index.html


--------------------
Go to the top of the page
+Quote Post
bogdanofnascie
post 1.10.2007, 17:40:34
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.09.2007

Ostrzeżenie: (0%)
-----


Indeksy są tworzone w celu przyspieszenia operacji:
  • dostępu do danych w posortowanych według kolumn indeksowanych
  • wyszukiwania wierszy, zawierających dane z indeksowanych kolumn.
Należy jednak zwrócić uwagę, że indeks spowalnia wstawianie, usuwanie i zmiany wartości w indeksowanych kolumnach, ponieważ jego zawartość musi ulec zmianie w momencie zmiany zawartości tabeli.


nie wiem tym samym co zyskam wstawiając taki indeks

Go to the top of the page
+Quote Post
Blodo
post 2.10.2007, 13:17:17
Post #12





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


Cytat
Indeksy są tworzone w celu przyspieszenia operacji:
dostępu do danych w posortowanych według kolumn indeksowanych

UPDATE musi najpierw znalezc wiersz ktory ma zmienic. Jak twoja tabela ma kupe wierszy, to wyszukiwanie bedzie zajmowac wiecej czasu niz samo wstawianie. Dodanie indexu przyspiesza wyszukiwanie, wiec i rowniez cale zapytanie. Tak na dobra sprawe to spowolnienie widac tylko na tabelach ktore maja tak malo wierszy, ze i tak sie nie musisz indeksami przejmowac.

Czytanie ze zrozumieniem pomaga. smile.gif
Go to the top of the page
+Quote Post
bogdanofnascie
post 2.10.2007, 19:17:04
Post #13





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 29.09.2007

Ostrzeżenie: (0%)
-----


dzięki wielkie chłopaki biggrin.gif ale to teraz zapierd*** ;D

Ten post edytował bogdanofnascie 2.10.2007, 19:34:13
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 16:17