ugrás a tartalomhoz

mysql index kérdés

lysander · 2004. Júl. 2. (P), 13.29
Sziasztok!

Van egy egyszerű table

CREATE TABLE `refr` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`date` date NOT NULL default '0000-00-00',
`text` text NOT NULL,
KEY `id` (`id`),
KEY `date` (`date`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;

és egy select:
SELECT text,date FROM refr ORDER BY date DESC LIMIT 1;

egy paraméter:
my.conf : log-long-format

és két kérdés:
- ez a log-long-format ha jól értettem, azt teszi, hogy nem csak a slow queryket hanem az indexeletlen lekéréseket is logolja. Az én selectem szerintem indexelt, ezt állitja az explain is.
mysql> explain SELECT text,date FROM refr ORDER BY date LIMIT 1;
+-------+-------+---------------+------+---------+------+------+-------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------+-------+---------------+------+---------+------+------+-------+
| refr | index | NULL | date | 3 | NULL | 8 | |
+-------+-------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)

Akkor miért logolja mégis???

- kérdés 2:
ha LIMIT # et használok, miért nézi mégis át az összes sort egy indexelt lekérdezésben? Elvileg meg kéne állnia a #diknél. explain azt mondja az összes sort átnézte.

Köszi,
GaB
 
1

Összes sor

Bártházi András · 2004. Júl. 2. (P), 14.51
A LIMIT az már a teljes eredményhalmazt szűkíti le. Azaz egy WHERE miatt (vagy főként egy ORDER BY miatt) könnyen lehet, hogy minden sort át kell nézni, és abból csak az elejét megjeleníteni. Az SQL lekérdezés eredménye az elmélet szerint egyáltalán nem sorrendezett, hanem egy rendezetlen halmazt ad vissza. Azaz előbb egy rendezetlen halmaz készül el, amelynek megtalálja az összes elemét, majd ezt szűkíti le, rendezi.

Talán ezért. Talán nem. :)

-boogie-