Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 24. 1. 2019, 13:17:57
Mám tabulku a dotaz:
CREATE TABLE geo ( a int(10) unsigned NOT NULL, b int(10) unsigned NOT NULL, code varchar(2)NOT NULL ) select * from geo where 1707358628 between a AND b limit 1; +----+-------------+--------+------------+-------+--------------------------------+-------------+---------+------+-------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+--------+------------+-------+--------------------------------+-------------+---------+------+-------+----------+-------------+ | 1 | SIMPLE | geo | NULL | range | a,b,c | a | 4 | NULL | 41438 | 50.00 | Using where | +----+-------------+--------+------------+-------+--------------------------------+-------------+---------+------+-------+----------+-------------+ ale ať mu podstrkávám všelijaké indexy explain dopadne vždy stejně. Jaky pro tento typ dotazu použít index? |
||
Kajman Profil |
#2 · Zasláno: 24. 1. 2019, 13:44:04
Však použil index a. A řádky pak ještě filtroval bez indexu dle podmínky na sloupec b. Mysql myslím neuměla moc dobře použít dva indexy a dělat z nich průnik.
Nevím, jak to je na nové verzi, jestli to už umí lépe, v manuálu se tomu věnují dev.mysql.com/doc/refman/8.0/en/range-optimization.html Na rozsahy se proto občas používají spatil data, hlavně pro ty starší verze mysql, viz blog.jcole.us/2007/11/24/on-efficiently-geo-referencing-ips-with-maxmind-geoip-and-mysql-gis Navíc, pokud se tabulka jmenuje geo, tak bych využití spatial dat a indexů očekával. |
||
MaK Profil |
#3 · Zasláno: 24. 1. 2019, 15:02:13
Kajman:
„Však použil index a. A řádky pak ještě filtroval bez indexu dle podmínky na sloupec b.“ Takové chování je pro index nad jedním sloupce pochopitelné. Ale předpokládal jsem, že nad párovým indexem UNIQUE (a,b) bude rozumnější. |
||
Kajman Profil |
Pokud by byl dotaz např.
a=1 and b>10 1707358628 between a AND b Zmíněné spatial indexy použijí R-tree en.wikipedia.org/wiki/R-tree |
||
Časová prodleva: 6 let
|
0