Autor Zpráva
holi
Profil
Zdravím,
mám tento sql dotaz pro zaznamenání aktivity uživatelů.
UPDATE `teachers` SET `teachers`.`lastrequest` = now() WHERE `teachers`.`id` = '1'

No k ménu překvapení, tento jednoduchý zápis zabírá 80-100ms a přitom mnohem složitější dotazy i třeba select, který má 3 subdotazy, zabírají 2-5ms. Jde ta rychlost stáhnout nějak dolů ?

MySQL: 5.5.31-0+wheezy1
PHP Driver: MySQLi

EDIT:// Ještě se omlouvám za duplicitní název tématu, všiml jsem si že je jich zde celkem dost, ale vždy je to konkrétní případ. Popř mi můžete pro příště říct jak nazvat téma, rád se poučím.
aDAm
Profil
Máš vytvořen index na sloupcem ID?
holi
Profil
aDAm:
Tak ID je autoincrement a primary key. Zas až tak nevím jaký je rozdíl mezi indexem a primary key, ale myslím, že ve své podstatě je to jedno a to samé musí to být unikátní ne?
ninja
Profil
Zkuste místo now() vložit string obsahující aktuální čas, je-li to možné.

Nicméně že je UPDATE náročnější než i komplikovaný SELECT není nic divného.
holi
Profil
ninja:
S tím že je UPDATE/zápis na disk pomalejší než SELECT/čtení z disku se počítá, ale rozdíl v řádu stovek ms? při tak malém objemu zapisovaných dat a ještě k tomu zrovna do tabulky která má 30 záznamů? Každopádně díky za tip, myslel jsem že je lepší získávat to více "atomicky".


ninja:
Nic se nezměnilo čas se stále drží na 100ms.
UPDATE `teachers` SET `teachers`.`lastrequest` = '2013-10-18 11:41:49' WHERE `teachers`.`id` = '1'



Tak ještě jednou,
provedl jsem ještě nějaké testy a zjistil jsem, že opravdu každý jednoduchý UPDATE zabírá okolo 100ms(samozřejmě s náročností se časový interval prodlužuje), proto se chci zeptat. Je nějaký způsob jak optimalizovat UPDATE třeba i mimo SQL dotazy/příkazy?
Kajman
Profil
Rozdíl bývá i mezi použitím myisam a innodb úložiště. Kdy první zamyká celou tabulku, druhé jen řádek, ale má zase režie na transakce.

Také se může projevit výkon stroje a vyladěnost konfigurace mysql serveru.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: