Jedna z tabel klienta wygląda tak:
CREATE TABLE `mix_stats` (
`id` int(11) NOT NULL auto_increment,
`id_produktu` decimal(20,0) NOT NULL default ’0′,
`data` date default NULL,
`count` decimal(1,0) NOT NULL default ’0′,
`session` varchar(255) NOT NULL default ”,
`ip` varchar(20) NOT NULL default ”,
`referer` varchar(255) NOT NULL default ”,
PRIMARY KEY (`id`)
) TYPE=MyISAM
MySQL 3.23, w logach następujące wpisy:
# Time: 080726 10:40:51
# User@Host: xxx[xxx] @ localhost []
# Query_time: 48 Lock_time: 0 Rows_sent: 1 Rows_examined: 639552
SELECT count(id) FROM mix_stats WHERE id_produktu = ’84092324382e93e’ AND session = ”;
Jeżeli ktoś jest na tyle cierpliwy, by czekać 48 sekund na wynik, to musi mu bardzo zależeć…
Analizę bazy wykonywałem na MySQL 5.0.60, więc mam większe pole do popisu, np.:
mysql> SELECT count(id) FROM mix_stats WHERE id_produktu = '84092324382e93e' AND session = ''; +-----------+ | count(id) | +-----------+ | 0 | +-----------+ 1 row in set, 65535 warnings (0.99 sec) mysql> SHOW WARNINGS LIMIT 3; +---------+------+-----------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------+ | Warning | 1292 | Truncated incorrect DOUBLE value: '84092324382e93e' | | Warning | 1292 | Truncated incorrect DOUBLE value: '84092324382e93e' | | Warning | 1292 | Truncated incorrect DOUBLE value: '84092324382e93e' | +---------+------+-----------------------------------------------------+ 3 rows in set (0.00 sec)
Na początek polecam: DECIMAL. Choć pewnie skończy się przejściem do innego usługodawcy, gdzie mocniejsza maszyna bazodanowa przemieli to szybciej (ostrzeżenia i błędy i tak użytkowników nie interesują)…
Tagi: log-slow-queries, MySQL
[...] kiedyś płakałem z tego powodu – Analiza log-slow-queries (z życia wzięte…), a tu stary klient narzeka na wydajność swojego serwera. I co my tu [...]