我有一个SELECT将带有主键的表与函数的结果连接在一起,并且它不使用主键索引。如何强制使用索引?我尝试使用FORCE指令,但是它不起作用。
选择
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
最佳答案
你工作太辛苦了。抛开功能并简单地说
SELECT *
FROM tb1
WHERE prof = 25
ORDER BY end_date DESC
LIMIT 1;
为了获得更好的性能,请将
prof
上的索引替换为INDEX(prof, end_date)