如何针对常数值优化 SELECT?

How to optimize SELECT against a constant value?

因为我正在使用我无法控制的数据结构,所以我的数据库中有一个 table,它可能有数百万对 Foreign-key => (key => value)。现在,我知道其中一个键将是某个值(在本例中键是 related_content)。 MySQL 是否可以优化查询,以便它不必搜索整个 table 的结果?

示例table(称为meta):

fk | key               | value
====================================
1  | 'related_content' | '[2,3,4]'
1  | 'condiment'       | 'mayo'
1  | 'condiment'       | 'bananas'
29 | 'condiment'       | 'ketchup'
29 | 'related_content' | '[1,7,9]'
95 | 'condiment'       | 'mustard'
95 | 'related_content' | '[5,6,8]'

示例查询:

SELECT value FROM meta WHERE fk = 29 AND key = 'related_content';

我想做的是:

ALTER TABLE `meta` ADD INDEX `meta_related` ON (`key`) WHERE `key` = 'related_content';

(在有人问之前,key 列已经有一个索引)

如果您要添加 key_index (int11) 列来表示键列中的字符串,例如:related_content =1, condiment=2 并且您将在 [= 上添加索引12=] 列,int 上的索引将比 string 上的索引快,最后你将 select 使用两个索引整数字段。会很快

添加一个'composite'索引

 INDEX(fk, key)