Sziasztok.
Van egy pár dolog amit próbálgatok, több millió akár milliárd soros táblákból való lekérdezésénél. Van egy pár dolog amit nem igazán tudtam megmagyarázni.
Nézzük az elsőt:
CREATE TABLE `art` (
`id` int(11) NOT NULL auto_increment,
`feed_id` int(11) NOT NULL,
`link` varchar(80) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`),
KEY `feed_id` (`feed_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Van ez a teszt tábla 1970k sor, a feed_id értékei 0-19ig.
A következő egyszerű selektet nézzük.
SELECT id, link, text FROM art WHERE feed_id=15
És most jön az ami meglepett ha a fenti táblastruktúra van, vagyis létrehozok egy INDEXet a feed_id -ra a lekérés (ugyan nem sokkal) de 1-2%-al lassabb mintha nem indexelem a feed_id -t csak a Primary key szerinti indexet használom.
Arra gyanakszom, hogy a feed_id túl "gyenge" szűrési feltétel, vagyis mivel értékei túl kis intervallumból veszi ezért a B-fa felépítése ebben az esetben nem lesz optimális.
Kíváncsian várom véleményeteket.
Hogy kicsit áttekinthetőbb legyen néhány dolog amiről már volt szó.
Néztem EXPLAINT nem full table scant csinál. Íme az eredménye:
select_type table type possible_keys key key_len ref rows Extra
SIMPLE art1 ref feed_id feed_id 4 const 36941
alanyze table, optimize table volt futtatva de nem észleltem utána sem változást.
Beállítások:
myisam_max_sort_file_size=8G
myisam_max_extra_sort_file_size=8G
myisam_sort_buffer_size=256M
key_buffer_size=512M
read_buffer_size=128K
read_rnd_buffer_size=256K
sort_buffer_size=256K