关于mysql的这个查询将永远执行

时间:2013-08-18 02:43:22

标签: php mysql

我制作一个简单的管理模块来查询数据库以显示结果。我通过php使用此查询:

SELECT
* 
FROM myTable 
WHERE id in(SELECT 
            id_registro 
            FROM myOtherTable 
            where id_forma='".$id_club."' and fecha_visita Like '%".$hoy."%'
            )
order by id DESC

结果显示,它需要很长时间,比如2分钟。任何人都可以帮助我吗? 谢谢!

3 个答案:

答案 0 :(得分:4)

如果没有看到您的数据库,很难找到让它更快的方法。 也许您可以尝试将WHERE IN转为INNER JOIN。对于像这样的事情

SELECT * FROM myTable INNER JOIN myOtherTable
ON (myTable.id = myOtherTable.id_registro)
WHERE myOtherTable.id_forma = '$id_club'
AND myOtherTable.fecha_visita LIKE '%$hoy%'
ORDER BY myTable.id DESC

注意在放入SQL查询或使用PDO prepare语句之前应该清理变量。

答案 1 :(得分:1)

子查询总是需要时间,因此最好尽可能多地忽略它们。

尝试通过检查其基数来优化您的查询,可能的密钥由DESC or EXPLAIN实施,并在必要时使用FORCE INDEX覆盖可能的密钥。

我猜您可以将查询修改为:

SELECT
* 
FROM myTable 
inner join id_registro 
on (id = id_forma )
where
 id_forma='".$id_club."' and fecha_visita Like '%".$hoy."%'
order by id DESC

答案 2 :(得分:0)

在mysql中LIKE可能需要很长时间,有或没有索引。 你有一个非常大的数据库吗?