0
私は、SELECTを使ってその主キーと関数の結果を結合し、主キーインデックスを使用しません。インデックスを強制的に使用するにはどうすればよいですか?私はFORCE命令で試しましたが、動作しません。MySQL関数を結合する際にインデックスを使用する
あなたはあまりにも懸命に仕事をしている
SELECT * FROM tb1 where id = get_last(25)
構造
CREATE TABLE `tb1` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`prof` INT(11) NOT NULL,
`start_date` DATETIME(6) NOT NULL,
`end_date` DATETIME(6) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `IX_prof` (`prof`)
);
CREATE DEFINER=`root`@`%` FUNCTION `get_last`(prof int) RETURNS int(11)
BEGIN
DECLARE id int(11);
select a.id INTO id from tb1 a
where a.prof = prof
and a.end_date in (
SELECT MAX(b.end_date)
FROM tb1 b
WHERE b.prof = a.prof
);
RETURN id;
END
で
prof
であなたのインデックスを交換、さらに性能を得るためにを言うの? – matino
なぜあなたはすべての列を選択し、mysqlはインデックスからすべての値を取得することができないため、説明に「インデックスを使用する」がないことを尋ねると、あなたはどこにいて、それはあなたが一般的に大丈夫だということを意味しています(しかし、この種のfucntionsはあまり良くありません)。 – Alexey
私は、クエリはインデックスを使用しないと思うのですが、possible_keysとkeyに '列。 – matino