Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Różny czas wykonywania zapytań na tej samej tabeli, Dwie takie same tabele 160tyś i 260tyś - znacząco różny czas wykonywan
Radek_1
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 9.09.2003
Skąd: Bełchatów

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


Mam dwie takie same tabelki w różnych bazach (ale ten sam serwer):
  1. CREATE TABLE IF NOT EXISTS `baza` (
  2. `UID` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(30) CHARACTER SET latin1 NOT NULL,
  4. `lvl` int(3) DEFAULT NULL,
  5. `voc` varchar(30) CHARACTER SET latin1 DEFAULT NULL,
  6. `guild` varchar(30) DEFAULT NULL,
  7. `sex` varchar(7) DEFAULT NULL,
  8. `world` varchar(20) NOT NULL,
  9. `joined` int(10) NOT NULL,
  10. `lastlogin` int(10) DEFAULT NULL,
  11. `created_acc` int(10) DEFAULT NULL,
  12. `city` varchar(30) DEFAULT NULL,
  13. PRIMARY KEY (`UID`),
  14. KEY `name` (`name`),
  15. KEY `guild` (`guild`)
  16. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=185322 ;



W jednej jest 165tyś rekordów (23mb), w drugiej 270 tyś (33mb). Wykonuje paczki po 4 update na każdej bazie. Zapytanko wygląda mniej więcej tak:

  1. mysql_query("UPDATE baza SET lvl=".$record[level].", voc='".$record[vocation]."', guild='".$record[guild]."', sex='".$record[sex]."', lastlogin=".$record[lastlogin].", created_acc='".$record[created]."', city='".$record[residence]."' WHERE UID=".$record[uid]);


Najpierw baza z 165tyś rekordów i czasy wykonania 4 update w cyklu:
0.0023970603942871 sec
0.0020239353179932 sec
0.002047061920166 sec
0.0020139217376709 sec
0.0020439624786377 sec
0.0020511150360107 sec
0.0022640228271484 sec
0.0016040802001953 sec
0.0011930465698242 sec
0.0021450519561768 sec
0.0013589859008789 sec
0.0019218921661377 sec

Suma czasu dla 50 zapytań update: 4.3591480255127 sec


To samo na większej bazie (270tyś), też po 4 zapytania w cyklu:
0.012955188751221 sec
0.0023949146270752 sec
1.7737629413605 sec
0.16048979759216 sec
0.24561595916748 sec
0.15996599197388 sec
0.22124600410461 sec
0.26379299163818 sec
0.2989809513092 sec
0.18192505836487 sec
0.0041689872741699 sec
0.027604103088379 sec
0.53889012336731 sec

Suma dla 50 zapytań: 8.4705171585083 sec


Czym mogą być spowodowane tak duże rozbieżności w czasue wykonania tak prostego update? Różnica w ilości rekordów nie jest duża, zaledwie 100tyś. Co można zrobić aby poprawić efektywność zapytań?

Ten post edytował Radek_1 12.01.2013, 01:59:14
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Radek_1
post
Post #2





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 9.09.2003
Skąd: Bełchatów

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


Cytat
dlaczego te pola :

[SQL] pobierz, plaintext

`name` varchar(30) CHARACTER SET latin1 NOT NULL,
`voc` varchar(30) CHARACTER SET latin1 DEFAULT NULL,


sa w latin1 skoro pozniej definiujesz tabele jako utf?? jaki w tym sens?


Pewne zaszłości po źle zaprojektowanej bazie danych na początku (IMG:style_emoticons/default/smile.gif)

Cytat
skoro danych masz mniej niz 1kk to po co zdefiniowales tak wielki index questionmark.gif jak dla mnie by wystarczyl smalint(6)

Rekrody zmieniają się dość dynamicznie, przekroczylem już dawno 1kk (IMG:style_emoticons/default/sad.gif)


Cytat
wykonaj
SELECT * FROM baza PROCEDURE ANALYSE()
i zastanow sie, czy zasugerowane zmiany nie mają sensu.

Nie znałem tego polecenia.

Patrzę na wyniki i się zastanawiam, czy warto dodawać do INT atrybut UNSIGNED?
Albo pole voc, które teraz jest INT(1) podpowiada mi, aby zmienić na: ENUM('0','1','2','3','4','5','6','7','8'), będzie działać szybciej? mniej miejsca w bazie zajmować?
Tak samo pole highscore z INT(1) na ENUM('0','1'), to już nie lepiej dać BOOLEAN?

Dzięki za pomoc i wskazówki (IMG:style_emoticons/default/smile.gif)

Edit:
Zmieniłem z Myisam na Innodb, wielkość tabelki z 25mb podskoczyła do 65.6mb, to normalne?

Ten post edytował Radek_1 17.01.2013, 21:27:57
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.02.2026 - 04:30