gpt4 book ai didi

mysql - 加快 MySQL 中的 DISTINCT 查询

转载 作者:行者123 更新时间:2023-11-29 01:04:41 25 4
gpt4 key购买 nike

我有一个 InnoDB MYSQL 表,它存储一个多选名称(或表调用的“代码”)、一个父对象的 ID (parent_id) 和在多选中选择的选项的名称 (name_id):

CREATE TABLE IF NOT EXISTS `v2_CA_venue_option_map` (
`map_id` int(11) NOT NULL auto_increment,
`code` varchar(30) NOT NULL,
`parent_id` int(11) NOT NULL,
`name_id` int(11) NOT NULL,
PRIMARY KEY (`map_id`),
UNIQUE KEY `3way_unique` (`code`,`parent_id`,`name_id`),
KEY `name_id` (`name_id`),
KEY `filter` (`code`,`name_id`),
KEY `parent_id` (`parent_id`),
KEY `code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=875156 ;

和一个简单的表来存储名称(我想我会显示这个,因为它在查询中使用):

CREATE TABLE IF NOT EXISTS `v2_CA_venue_option_name` (
`name_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`name_id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Venue Option Names' AUTO_INCREMENT=60 ;

我想针对以下查询进行优化:

SELECT DISTINCT name_id, name 
FROM `v2_CA_venue_option_map`
JOIN `v2_CA_venue_option_name`
USING (name_id)
WHERE code = "a_event_types"

执行此查询大约需要 600 毫秒,我想知道:

  1. 如果我可以在表上放置一个索引来加速这个不同的查询。
  2. 如何才能以更好的性能获得相同的结果。

下面是对上述查询的解释。

enter image description here

更新,我删除了第二个问题。

更新,看来加快速度的最佳方法是将输出存储在一个单独的表中一次,然后从那时起对该表进行调用,因为该表无法足够快地执行查询我的需求和索引似乎对这个 DISTINCT 查询没有帮助。

最佳答案

尝试使用惰性 group by 而不是 distinct,这样 mysql 就少了一个需要担心的列。

SELECT name_id, name 
FROM `v2_CA_venue_option_map`
JOIN `v2_CA_venue_option_name`
USING (name_id)
WHERE code = "a_event_types"
GROUP BY name_id

关于mysql - 加快 MySQL 中的 DISTINCT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7575572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com