优化MySql语句

时间:2015-06-09 20:11:22

标签: mysql

这是一个面试问题,我一直在前面说我不确定如何优化查询 - 我在.Net堆栈中工作并且已经享受了实体框架已有一段时间了。所以我在这方面的技能受到了一点影响。这也是MySql。

所以,这让我很生气 - 想弄清楚如何优化这种说法。 特别是没有数据库可以使用

声明看起来很像:

SELECT a.eid, a.cid, b.e_date
FROM table_A a
JOIN table_B b ON a.eid = b.eid
WHERE a.cid IN 
    (SELECT cid FROM table_A_trans WHERE `someDateColumn` <= '2014-06-01 00:00:00') 
AND a.eid NOT IN(123,124,200)

我认为这可能与子查询运行这一事实有关,这可能会带来数百个结果,然后才会在最终的NOT IN()子句中删除它们。

那么 - 你会怎么做?

2 个答案:

答案 0 :(得分:1)

您对子查询的假设是正确的。乍一看,这就是问题所在。

由于这是一个简单的查询,您可以直接在查询中使用它 我认为这可行(未经测试):

ng-model

答案 1 :(得分:1)

删除子查询,您可以使用索引从子查询中获取结果,然后不再使用索引

SELECT  a.eid, a.cid, b.e_date
FROM table_A a
INNER JOIN table_B b ON a.eid = b.eid
INNER JOIN table_A_trans a_trans ON a.cid = a_trans.cid
WHERE 
a_trans.someDateColumn <= '2014-06-01 00:00:00'
AND a.eid NOT IN(123,124,200)
GROUP BY a_trans.cid

是非子查询版本

相关问题