create index IDX_KSE_NO_01 on tb_kse(ss_no);
create index IDX_KSE_NO_02 on tb_kse(id_no);
并重写查询(或扩展):
SELECT *
FROM tb_kse WHERE ss_no = ?
UNION
SELECT *
FROM tb_kse
WHERE ss_no IS NULL AND id_no = ?;
dbfiddle演示 另一种方法是创建生成的列并在其上创建索引:
CREATE TABLE tb_kse(id_no INT, ss_no INT,
gen_col INT GENERATED ALWAYS AS (ifnull(ss_no, id_no)) STORED);
create index IDX_KSE_NO_01 on tb_kse(gen_col);
SELECT *
FROM tb_kse
WHERE gen_col = ?;
2条答案
按热度按时间vu8f3i0k1#
mysql不支持基于函数的索引。您应该创建普通索引:
并重写查询(或扩展):
dbfiddle演示
另一种方法是创建生成的列并在其上创建索引:
dbfiddle演示2
1rhkuytd2#
@lad2025是正确的,mysql不支持基于函数的索引(像postgresql那样),但是mysql 5.7引入了一个基于表达式的虚拟生成列的特性,然后您可以在虚拟列上创建索引。