0
我有一個選擇連接一個表與它的主鍵與一個函數的結果,它不使用主鍵索引。我該如何強制使用索引?我嘗試了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無法從索引中獲取所有值。你使用的地方和它意味着你一般都沒問題(儘管使用那種類型的函數不是太好) – Alexey
我認爲問題是查詢不使用索引,因爲在possible_keys和key中有'NULL'列。 – matino