gpt4 book ai didi

MYSQL - 连接三个大表

转载 作者:太空宇宙 更新时间:2023-11-03 12:15:34 25 4
gpt4 key购买 nike

我想在 MySQL 中执行这个查询:

SELECT `id`, `state`, `city`, `company`, `manager`, `district`, `group`, `subgroup` FROM `data_table` WHERE `id` IN ( 
SELECT DISTINCT `dataID` FROM `tags_data` WHERE `table` = 'data_table' AND `tagID` IN (
SELECT `id` FROM `tags` WHERE `tag` LIKE '%fruit%'
) LIMIT 0, 20 );

但是 MySQL 5.5 不支持同时使用 INLIMIT 命令!

#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 

所以我必须使用 INNER JOINLEFT JOIN 并合并这些表才能使用 LIMIT

但我的问题是这些表很大,每个页面可能会多次使用此查询!所以查询的时间成本对我来说很重要!

我知道这个问题可能会重复,但我一直很困惑。

最佳答案

你可以摆脱你的子查询并使用连接子查询将运行每一行,所以它可能会花费你代替它们,然后使用适当的索引,只选择你需要的列

SELECT 
DISTINCT
d.`id`,
d.`state`,
d.`city`,
d.`company`,
d.`manager`,
d.`district`,
d.`group`,
d.`subgroup`
FROM
`data_table` d
JOIN `tags_data` td ON (d.id =td.dataID)
JOIN `tags` t ON (t.id =td.`tagID`)
WHERE td.`table` = 'data_table' AND t.`tag` LIKE '%fruit%'
LIMIT 0, 20

索引

ALTER TABLE `tags_data` ADD INDEX `indexname1` (`dataID`); 
ALTER TABLE `tags_data` ADD INDEX `indexname2` (`tagID`);

或者你可以像这样用限制连接你的表,也可以在连接查询中使用 where 条件 WHERE td.table= 'data_table'

JOIN 
(select dataID from `tags_data` WHERE `table` = 'data_table' limit 0,20)
td ON (d.id =td.dataID)

关于MYSQL - 连接三个大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408227/

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