MySQL新加入的查询与子查询花费的时间太长

Twister1002

我试图弄清楚为什么我的查询要花这么长时间。每个查询通常要花费60-90秒左右的时间,并且执行多次。

旧查询:

     "select * from $table where type = '".$type."' and transdate >= '".$begdate."' and 
      transdate<='".$enddate."' and customerin (select customer from master
      where targetaccount='Y') ";

新查询:

    $q = "SELECT * FROM activity  INNER JOIN custactivities ON 
    activity.activityID = custactivities.activityID  WHERE  type  = '$type'  AND  
    transdate BETWEEN '$begdate' AND '$enddate'  AND  custnum  IN 
    (SELECT customer FROM master WHERE targetaccount = 'Y')  
    GROUP BY custactivities.customer";

原始查询大约需要0.15秒,新查询每个查询大约需要60-90秒。

它确实有一些PHP,但是查询仍然是问题所在。

任何意见是极大的赞赏。

亚当·芬托西

如果没有索引,请在以下列中添加索引

activityID on both table
type - if it's numeric, don't use the '
transdate
targetaccount - if you can, use numeric, or enum definition for that column for better indexing

并且如果主表在使用targetaccount ='Y'的情况下不是太大,则可以将其分离到另一个查询,使用php进行提取,并使用爆破式将数组插入查询中,而不是使用子查询。

切勿使用ChrisS提到的*。

这是php和mysql的一些代码片段

$cust = array();
$sql = 'SELECT customer FROM master WHERE targetaccount = "Y"';
$query = mysql_query();
if ($query) {
    while ($row = mysql_fetch_row($query)) {
        $cust[] = $row[0]
    }
}

$sql = "select * from $table where type = '".$type."' and transdate >= '".$begdate."' and 
      transdate<='".$enddate."'" . (count($cust) ? ' AND custnum IN ('.implode(', ', $cust).')' : '');

我还没有测试过,但我想现在您明白了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问查询花费的时间太长

来自分类Dev

访问查询花费的时间太长

来自分类Dev

使用子查询花费太长时间的sort_by

来自分类Dev

MySQL查询“不存在”花费的时间太长

来自分类Dev

带连接的MySQL SELECT查询花费的时间太长

来自分类Dev

链接列表查询花费的时间太长

来自分类Dev

SQL UPDATE查询花费的时间太长

来自分类Dev

带子查询的sort_by花费的时间太长

来自分类Dev

在where子句中使用sleep()时,MySQL查询花费的时间太长

来自分类Dev

对左连接行进行计数的 MySQL SELECT 查询花费的时间太长

来自分类Dev

通过坐标查询花费的时间太长-要优化的选项?

来自分类Dev

更改表查询花费的时间太长,无法添加约束

来自分类Dev

Monogo聚合查询在服务器上花费的时间太长

来自分类Dev

sql最后记录的行花费太长时间查询

来自分类Dev

SQL查询花费的时间太长,无法呈现/返回数据

来自分类Dev

SQL查询“ select ... where select ...”花费的时间太长

来自分类Dev

mysql查询响应时间太长

来自分类Dev

Mysql 查询花费太多时间

来自分类Dev

带有子查询的 OR 子句花费了太多时间

来自分类Dev

AX 2012R2:查找查询花费的时间太长,查找从未打开

来自分类Dev

MySQL jdbc连接花费太长时间

来自分类Dev

LinqToSql查询返回时间太长,性能太长

来自分类Dev

使用子查询加入

来自分类Dev

Laravel 加入子查询

来自分类Dev

加入子查询

来自分类Dev

子查询加入错误

来自分类Dev

(+) 加入子查询

来自分类Dev

MySQL查询在AJAX请求中花费大量时间

来自分类Dev

来自joomla的Mysql查询花费很长时间