繁体   English   中英

提高SQL查询的性能以从多列的不同表中选择ID

[英]Improve performance of SQL Query to select ids from different tables in multiple columns

让我们想象一下我具有以下表结构

表:图像

id   path   

1    x  
2    x  
3    x  
4    x  
5    x  
6    x  
7    x  
8    x

表:用户

id    image imageSmall

1     1     1
2     2     2
3     4     4

桌子:书

id    image imageSmall

1     5     5
2     6     6
3     8     8

我现在想获取其他表中使用的每个图像的ID。 我在这里做了这个查询

SELECT id FROM images WHERE id IN (SELECT image FROM user) OR id IN (SELECT imageSmall FROM user) OR id IN (SELECT image FROM books) OR id IN (SELECT imageSmall FROM books);

我在这里看到的问题是,当我拥有大量数据时,由于查询的许多IN部分,此查询可能非常耗时且根本无法执行。 有没有办法改善此查询的性能?

我会说这是exists而不是in

SELECT id
FROM images i
WHERE EXISTS (SELECT 1 FROM user u WHERE u.image = i.id) OR
      EXiSTS (SELECT 1 FROM user u WHERE u.imageSmall = i.id) OR
      EXISTS (SELECT 1 FROM books b WHERE b.image = i.id);

为了提高性能,请确保您具有以下索引:

create index idx_user_image on user(image);
create index idx_user_imageSmall on user(imageSmall);
create index idx_books_image on books(image);

使用联接而不是选择中的许多选择,然后使用DISTINCT返回唯一值:

SELECT DISTINCT(i.id) FROM images i 
INNER JOIN `user` u 
INNER JOIN `books` b 
WHERE b.image=i.id OR b.imageSmall=i.id OR u.image=i.id OR u.imageSmall=i.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM