Mysql查询很慢(分组)

时间:2015-10-09 08:43:49

标签: php mysql group-by

mysql查询非常慢,但我使用$dir = '/your/directory/here/'; $number = preg_replace('/20151001_Test\((.*)\)_test_summary.txt/','$1',$line); $files = scandir($dir); $matching = preg_grep('/_Test(' . $number . ')_test.txt/'); if ($matching) { $file = file_get_content($matching[0]); } 函数...

我通过查询和查询快速删除组。

我该如何解决这个问题?

我的查询代码:

"group by"

3 个答案:

答案 0 :(得分:1)

  1. 您的第一个查询不符合SQL标准,只有在未启用严格的sql模式时才会由mysql处理。
  2. 您将根据第一个查询返回的结果在循环中发出第二个查询。因此,如果第一个查询返回10行,那么您将执行第二次查询10次。这很慢。您应该将2个查询重写为一个,因为两个查询都查询同一个表,并且几乎相同的标准。
  3. 不知道第二个while循环是什么,因为我看不到$ listele的定义。

答案 1 :(得分:0)

减速可能与GROUP BY子句无关。尝试在您需要的列上添加索引。

了解索引的链接:http://www.tutorialspoint.com/sql/sql-indexes.htm

MySQL Profiling也可能对您的努力有所帮助

答案 2 :(得分:0)

您的查询未经过优化,可能会以其他方式更好地完成,包括仅使用一个组合查询(JOIN)一次获取所有数据。

此外,如果您的表中包含大量项目,那么最好为字段创建INDEXES,以便在过滤器的常见查询中使用,以便加快搜索速度。

例如,你的第一次选择具有这种复杂性(并且可能没有很好地形成)

SELECT * FROM konucuklar WHERE status='' 
                           and category='football' 
                         GROUP BY matchhour 
                         ORDER BY id asc

但仅用于获取第二个查询的matchhour。最小化优化是使用查询来仅获取所需的字段。

SELECT DISTINCT matchhour FROM konucuklar WHERE status='' and category='football'