0

我制作了一个简单的管理模块来查询数据库以显示结果。我通过 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 分钟。任何人都可以帮助我吗?谢谢!

4

3 回答 3

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 准备语句之前对其进行清理。

于 2013-08-18T02:51:54.043 回答
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
于 2013-08-18T02:56:09.357 回答
0

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

于 2013-08-18T02:57:25.923 回答