如何针对常数值优化 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)
因为我正在使用我无法控制的数据结构,所以我的数据库中有一个 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)