我有一个非常简单的五列表,
CREATE TABLE notification_tag (
_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
notification_id INT NOT NULL,
tag_value CHAR(11) NOT NULL,
recipient CHAR(11) NOT NULL,
brand CHAR(11),
INDEX tag_value (tag_value),
INDEX notification_id_tag_value_recipient_brand (notification_id, tag_value, recipient, brand)
) CHARACTER SET ascii COLLATE ascii_bin;
Explain显示,当我运行下面的查询时,MySQL正在使用键tag_value
。
x一个一个一个一个x一个一个二个x
有什么理由不使用notification_id_tag_value_recipient_brand
索引吗?
1条答案
按热度按时间vhmi4jdf1#
您的查询将不使用
(notification_id, tag_value, recipient, brand)
上的索引,因为该查询没有任何搜索词来搜索索引的最左列。以电话簿为例,如果您按姓氏或姓氏和名字搜索某人,它会有所帮助。但是如果您只按名字搜索,则电话簿中条目的顺序就没有帮助了。
您可能还喜欢我的演示文稿How to Design Indexes, Really或video。