Helo?. Od niedawna bawi? si? w MTA j?zykami bazodanowymi (czyli wbudowanymi SQLite i MySQL). Niby nauczy?em si? ju? wykonywa? podstawowe zapytania, ale jak widz?, SQLite jest ponad 10 razy wolniejsze przy wykonywaniu SELECT. Zastosowa?em transakcje, kt?re powinny by? wsz?dzie dla tego j?zyka (zastosowa?em si? do tego poradnika), wykonuj? zapytania 250,000 razy (!) i z tego co zauwa?y?em:
- INSERT w SQLite dzia?a o kilkana?cie, czasem kilkaset milisekund szybciej (!)
- SELECT w SQLite dzia?a o ponad 10 razy wolniej
Dla test?w w??czy?em te? transakcje dla obu j?zyk?w (tak mi poleci? Tey) i w?a?nie od tego czasu zauwa?y?em, ?e SQLite si? "krztusi". Czy da si? to jako? zoptymalizowa??
Dodam te? tekst z log?w, coby udowodni?, ?e rzeczywi?cie SQLite ma problem z wykonywaniem SELECT:
A tutaj kod:
Ostatnio zmieniony przez shiny 2014-07-05, 12:56, w całości zmieniany 1 raz
Nie nada?, ale to powinno by? bez znaczenia - i tak pobiera wszystkie dane z tych tabel. Ale faktycznie w?tkotw?rca nie powinien tworzy? tabel bez indeks?w.
Sprawa jest te? taka, ?e podany kod nie korzysta z bazy danych, tak jakby to by?a baza danych, tylko jak plik tekstowy - ot wrzuca tam dane a p??niej wszystkie pobiera. Jesli faktycznie chcemy porownac te dwie bazy to nale?a?oby faktycznie skorzysta? z kluczy i select?w operuj?cych na podzbiorach danych.
Trzeba miec te? na uwadze, ?e SQLite jest po prostu plikiem na dysku, a po??czenie MySQL mo?e by? ze zdalnym hostem - nie wiem co tam wpisa?e? w MYSQL_HOST, ale je?li to nie jest host lokalny to do komunikacji z MySQL dochodzi te? latencja sieciowa. Opr?cz tego, nawet z serwerem lokalnym mo?na po??czy? si? przez socket TCP i socket UNIXowy. Ten drugi jest szybszy.
Inna sprawa jest taka, ?e odradzam korzystanie zar?wno z transakcji jak i tabel InnoDB. Napisa?em wiele gamemod?w i naprawd? nie mia?em jeszcze potrzeby zachowania atomiczno?ci serii operacji w bazie danych a do typowych operacji tabele MyISAM s? po prostu szybsze.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach