我使用一个函数的结果将一个表连接一个表及其主键,并且它不使用主键索引。我如何强制使用索引?我试过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
答案 0 :(得分:2)
你工作太辛苦了。抛出功能,然后简单地说
SELECT *
FROM tb1
WHERE prof = 25
ORDER BY end_date DESC
LIMIT 1;
要获得进一步的效果,请将prof
上的索引替换为
INDEX(prof, end_date)