MYSQL Subrequest太长了

时间:2016-10-15 08:35:01

标签: mysql sql database subquery

我有一个非常简单的子查询,但我认为我遗漏了一些东西,因为MySQL永远运行它。 假设我有两个表,FruitGenreFruitFlavor

 FRUIT GENRE
 | id |  name  |
 |  1 |  apple |
 |  2 | orange |

 FRUIT FLAVOR
 | fruit_id | flavor |
 |    1     | cherry |
 |    2     | orange |
是的,你可以吃樱桃味的苹果。但是任何味道都只与一种水果相关(例如,樱桃味樱桃不能)。

我的要求如下:

SELECT * FROM FruitGenre WHERE id IN (SELECT fruit_id FROM FruitFlavor where FruitFlavor.flavor='cherry')

然而,我可以等一个小时仍然没有休息。但如果我将请求分成两部分,我会立即得到答复。

Spliited:

SELECT fruit_id FROM FruitFlavor where FruitFlavor.flavor='cherry';

SELECT * FROM FruitGenre WHERE id IN (id_written_on_paper_from_previous_request)

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你可以尝试:

SELECT FG.* FROM FruitGenre FG
left join FruitFlavor FF
on FF.id = FG.id
where FF.flavor='cherry'

如果在FF.flavo中添加索引。查询会更快

答案 1 :(得分:0)

使用let border = SKPhysicsBody(edgeLoopFrom: self.frame) self.physicsBody = border func didBegin(_ contact: SKPhysicsContact) { let bodyAName = contact.bodyA.node?.name let bodyBName = contact.bodyB.node?.name print(bodyAName) print(bodyBName) }

尝试此方法
IntStream.rangeClosed(1, 26)
         .filter(it -> isPrime(it))
         .peek(every(5, System.out::println))
         .onFinalValue( it -> System.out.println("Last value is: " + it))
         .forEach( it -> {});

使用EXISTS

的另一种方法
SELECT * FROM FruitGenre FG 
WHERE Exists (SELECT fruit_id 
              FROM FruitFlavor FF 
              where FG.id = FF.fruit_id 
                AND FF.FruitFlavor.flavor='cherry')

注意:

  • 如果您在INNER JOIN表的SELECT FG.id, FG.NAME FROM fruitgenre FG INNER JOIN fruitflavor FF ON FF.id = FG.id WHERE FF.flavor = 'cherry' 列上没有任何索引,那么 在其上创建一个非聚集索引
  • 如果您在ID表的FRUITGENRE列上没有任何索引 然后在其上创建一个非聚集索引(考虑到您的查询和表大小,需要很多索引)