Fórum Root.cz
Hlavní témata => Server => Téma založeno: Ladik 24. 04. 2015, 14:59:12
-
Ahoj,
lze přinutit MySQL aby v dotazech s proměnnou použila index?
Mám založenou tabulku a naplněnou daty:
CREATE TABLE `test` (
`id` int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY
) ENGINE='MyISAM';
insert into test values (1),(2),(3),(4),(5);
Dále vykonám 3 příkazy:
select @id:=3;
select id from test where id=@id;
select id from test where id=3;
2. příkaz je bez použití indexu a 3. příkaz je s použitím indexu. Lze tedy nějak docílit u druhého příkazu použití indexu?
Děkuji.
-
mysql> DESC select id from test where id=@id;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | test | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> DESC select id from test where id=@id;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | test | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
1 row in set (0.00 sec)
-
eh, pardon, drobná chybička v copy/paste, první příklad měl být pochopitelně s "=3",
nicméně výsledek je stejný ...
-
Aha... tak v tom případě mě zmátl Adminer (http://www.adminer.org/), protože kde je id=@id, tak kliknutím na "explain" vygeneroval
id? select_type? table? partitions? type? possible_keys? key? key_len? ref? rows? Extra?
1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables[/tt]
kdežto u id=3 vygeneroval
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test const PRIMARY PRIMARY 4 const 1 Using index[/tt]
Děkuji moc - je to pro mě poučení na příště, že ne vše, co člověk vidí, je pravda.