gpt4 book ai didi

mysql - 我怎样才能加快这个查询?

转载 作者:行者123 更新时间:2023-11-29 07:08:01 24 4
gpt4 key购买 nike

我有一个包含 60 个属性的表,attribute1..attribute60。 MySQL中的数据库引擎和表引擎是MyISAM。查询如下:

SELECT DISTINCT attribute1
FROM `product_applications`
WHERE `product_applications`.`brand_id` NOT IN (642, 630, 513, 637, 632,
556, 548, 628, 651, 660,
648, 557, 650, 624, 652,
636, 546, 662, 634, 629,
657, 638, 658, 659, 661, 625)

我使用 NOT IN,因为该列表比 IN 列表小得多。

我创建了以下索引:

brand_id, attribute1, attribute2, attribute3, attribute4

DESC 显示正在选择该索引,但看起来它仍在查看整个表,因为我在“行”列中看到了整个行数:

6732948

在“额外”列中我有:

Using where; Using index; Using temporary

此查询耗时 7 秒。我在这里查看所有不同的选项,包括拆分表格。

更新:

通过巧妙地使用下面我 friend 提到的 UNION ALL,我能够将查询时间缩短一半。此外,这是一个动态生成的查询,所以你们中的一些人提供的临时表选项,虽然是个好主意,但对我来说是不可用的。

最佳答案

以前,以下使用了 LEFT JOIN——但是 OP 颠倒了使用 INNER JOIN 的逻辑:

   SELECT DISTINCT 
t.attribute1
FROM PRODUCT_APPLICATIONS t
JOIN (SELECT 642 AS brand_id
UNION ALL
SELECT 630
UNION ALL
SELECT 513
UNION ALL
SELECT 637
UNION ALL
SELECT 632
UNION ALL
SELECT 556
UNION ALL
SELECT 548
UNION ALL
SELECT 628
UNION ALL
SELECT 651
UNION ALL
SELECT 660
UNION ALL
SELECT 648
UNION ALL
SELECT 557
UNION ALL
SELECT 650
UNION ALL
SELECT 624
UNION ALL
SELECT 652
UNION ALL
SELECT 636
UNION ALL
SELECT 546
UNION ALL
SELECT 662
UNION ALL
SELECT 634
UNION ALL
SELECT 629
UNION ALL
SELECT 657
UNION ALL
SELECT 638
UNION ALL
SELECT 658
UNION ALL
SELECT 659
UNION ALL
SELECT 661
UNION ALL
SELECT 625) x ON x.brand_id = t.brand_id

您可以考虑填充 temp table , 来代替您在我的回答中看到的派生的。

关于mysql - 我怎样才能加快这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182261/

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