gpt4 book ai didi

sql - mysql查询性能

转载 作者:行者123 更新时间:2023-11-30 21:23:59 26 4
gpt4 key购买 nike

有人可以就此给出提示吗? :

我有一个表,比方说 tblA,其中我有 id1 和 id2 作为列和索引 (id1,id2)。我想选择 id1,其中 id2 属于多个集合。所以我想说

select id1 from tblA 
where id2 in (val1,val2,val3 ...)
union
select id1 from tblA
where id2 in (val4,val2,val3 ...)
union
(...)*

假设我们在表 A 中有以下内容:

(1,1)
(1,2)
(1,3)
(1,4)
(1,5)
(2,1)
(2,2)
(2,3)

现在我想要所有在 (3,4) 中具有 id2id1

所以我想得到的是id1 = 1

2 不应该出现,因为虽然我们有关系 (2,3) 但我们没有 (2,4) .

关于如何执行此查询的任何想法?我想如果 (...) 增长太多,上面的方法就会出现性能问题!?谢谢。

问候

最佳答案

你应该像这样创建一个临时表:

CREATE TABLE temp (id INT NOT NULL PRIMARY KEY) ENGINE MEMORY;

,用您正在搜索的值填充它(在您的示例中为 23):

INSERT
INTO temp
VALUES (3), (4)

并发出这个查询:

SELECT  ad.id1
FROM (
SELECT DISTINCT id1
FROM a
) ad
WHERE NOT EXISTS
(
SELECT NULL
FROM temp
WHERE NOT EXISTS
(
SELECT NULL
FROM a
WHERE a.id1 = ad.id1
AND a.id2 = temp.id
)
)

你应该在 (id1, id2) 上创建一个复合索引才能工作。

对于每个 id1,这将针对 temp 最多探测一次每个 id2,并会在第一个 id2temp 中不存在,为每个 id1 找到。

这是查询计划:

1, 'PRIMARY', '<derived2>', 'ALL', '', '', '', '', 2, 'Using where'
3, 'DEPENDENT SUBQUERY', 'temp', 'ALL', '', '', '', '', 2, 'Using where'
4, 'DEPENDENT SUBQUERY', 'a', 'eq_ref', 'PRIMARY', 'PRIMARY', '8', 'ad.id1,test.temp.id', 1, 'Using index'
2, 'DERIVED', 'a', 'range', '', 'PRIMARY', '4', '', 3, 'Using index for group-by'

,没有temporary,没有filesort

关于sql - mysql查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1201832/

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