MySQL在加入函数时使用索引

时间:2017-03-16 11:48:08

标签: mysql indexing

我使用一个函数的结果将一个表连接一个表及其主键,并且它不使用主键索引。我如何强制使用索引?我试过FORCE指令,但它没有用。

Image

选择

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

1 个答案:

答案 0 :(得分:2)

你工作太辛苦了。抛出功能,然后简单地说

SELECT  *
    FROM  tb1
    WHERE  prof = 25
    ORDER BY  end_date DESC
    LIMIT  1;

要获得进一步的效果,请将prof上的索引替换为

INDEX(prof, end_date)