相关疑难解决方法(0)

查询性能WHERE子句包含IN(子查询)

SELECT Trade.TradeId, Trade.Type, Trade.Symbol, Trade.TradeDate, 
       SUM(TradeLine.Notional) / 1000 AS Expr1
FROM   Trade INNER JOIN
             TradeLine ON Trade.TradeId = TradeLine.TradeId
WHERE  (TradeLine.Id IN
                      (SELECT     PairOffId
                        FROM          TradeLine AS TradeLine_1
                        WHERE      (TradeDate <= '2011-05-11')
                        GROUP BY PairOffId
                        HAVING      (SUM(Notional) <> 0)))
GROUP BY Trade.TradeId, Trade.Type, Trade.Symbol, Trade.TradeDate
ORDER BY Trade.Type, Trade.TradeDate
Run Code Online (Sandbox Code Playgroud)

当表开始增长时,我担心WHERE子句中IN的性能.有没有人对这种查询有更好的策略?子查询返回的记录数比TradeLine表中的记录数慢得多.TradeLine表本身以10 /天的速度增长.

谢谢.

编辑:我使用了将子查询从WHERE移动到FROM的想法.我投票支持了这个新查询的所有答案.

   SELECT Trade.TradeId, Trade.Type, Trade.Symbol, Trade.TradeDate,   
          PairOff.Notional / 1000 AS Expr1
   FROM         Trade INNER JOIN
                  TradeLine ON Trade.TradeId = TradeLine.TradeId INNER JOIN
                      (SELECT     PairOffId, SUM(Notional) AS Notional
                        FROM …
Run Code Online (Sandbox Code Playgroud)

sql sqlperformance

5
推荐指数
1
解决办法
1万
查看次数

"id(ids)"的表现?

可以使用以下查询吗?性能如何?

select * from table where id not in ( 2000 or much more ids here)
Run Code Online (Sandbox Code Playgroud)

我的初始测试非常快,但我想这是因为我是唯一正在使用服务器的人.

mysql performance

4
推荐指数
1
解决办法
1718
查看次数

嵌套SQL查询需要太长时间

我正在寻找一种优化我所拥有的SQL查询的方法.我正在努力获得一定数量的诗歌.

查询看起来像这样:

SELECT
    COUNT(*)  
FROM
    `poems`
WHERE `id` IN (    
                  SELECT `poem_id`
                  FROM `poems_genres`  
                  WHERE `genre_title` = 'derision'
              )
       AND `status` = 'finished';
Run Code Online (Sandbox Code Playgroud)

它需要太长时间(大约6-10秒),因为它不能使用索引(因为我认为IN()?).有没有办法以不同的方式重写此查询以更快地获得相同的结果?

mysql sql query-optimization

3
推荐指数
1
解决办法
1380
查看次数

如何获得多对多关系中没有表示的行?

我在学生和班级之间有多对多的关系,如下所示.我想获得所有未注册任何课程的学生的ID.

多对多的关系

由于数据集的大小,我想避免使用NOT IN.有更有效的解决方案吗?

sql t-sql sql-server

3
推荐指数
1
解决办法
814
查看次数

查询优化

有没有办法优化这个查询更快?

SELECT id FROM business 
WHERE id NOT IN(SELECT business_id FROM business_community GROUP BY business_id)
Run Code Online (Sandbox Code Playgroud)

mysql query-optimization

2
推荐指数
1
解决办法
139
查看次数

在同一查询中选择 DISTINCT 和 MAX

我有一个包含以下结构的行/数据的表

-----------
| SURVEY_ID |
------------
|  1       |
|  2       |
|  2       |
|  3       |
|  4       |
-----------
Run Code Online (Sandbox Code Playgroud)

我想在同一查询中获取不同的 ID 和最大 ID。我试过

select distinct(survey_id) as survey_id , max(survey_id) as current 
from survey_main 
group by survey_id
Run Code Online (Sandbox Code Playgroud)

这似乎没有返回正确的结果。我缺少什么?

编辑:所需结果

        ----------------------
        | 与众不同| 最大|
        ----------------------
        | 1 | 4 |
        | 2 | 4 |
        | 3 | 4 |
        | 4 | 4 |
        ----------------------

sql

2
推荐指数
1
解决办法
6万
查看次数

SQL查询不返回唯一结果.我需要使用哪种类型的联接?

我正在尝试运行以下MySQL查询:

SELECT * 
FROM user u 
JOIN user_categories uc ON u.user_id = uc.user_id 
WHERE (uc.category_id = 3 OR uc.category_id = 1)
Run Code Online (Sandbox Code Playgroud)

它目前返回:

Joe,Smith,60657,male
Joe,Smith,60657,male
Mickey,Mouse,60613,female
Petter,Pan,60625,male
Petter,Pan,60625,male
Donald,Duck,60615,male
Run Code Online (Sandbox Code Playgroud)

如果用户属于这两个类别,则它当前将返回两次.如何在不使用SELECT DISTINCT的情况下仅返回用户一次,无论他们属于多少个类别?

mysql sql

1
推荐指数
1
解决办法
249
查看次数