0

我的数据库中有一个包含 300684 条记录的表,问题是当我执行 sql 查询时,响应需要很长时间,所以有没有提高响应时间的解决方案?我在 phpmyadmin 工作,我不喜欢使用另一个 SGBD。谢谢

这是我的查询:

    SELECT * FROM `gipeord_conjoint` WHERE COD_AG in ( select PPR from 
gestion_delegation.dataidentifpersonnel)

这两个表位于两个不同gipeord_conjointdataidentifpersonnel数据库中,这是第一个的结构gipeord_conjoint

COD_AG int
NUM_CONJ int
SIT_CONJ varchar
PRF_CONJ varcha
NAT_CONJ varchar
DOTI_CONJ int
CIN_CONJ varchar

这是 dataidentifpersonnel 的结构:

PPR int
CIN varchar
CD_POSITION varchar
CD_NATION varchar
CD_DIPS varchar
CD_DISCIP varchar
CD_STATUT varchar

……

4

2 回答 2

2

从不...使用 Select *...EVER。


这就像说:

嗨,我的电脑比平时慢,你能解释一下为什么吗?

如果您需要我们提供更具体的帮助,您需要向我们展示您的查询。

至于您当前的情况,300,684 条记录并没有那么多,所以这不是查询缓慢的理由。

在我的头顶上

  • 您的查询可能未优化。看一下执行计划。(我会寻找表扫描)
  • 确保你有正确的索引。
  • 看看有多少人同时运行请求。
  • 检查谁在查询数据库以及查询来自哪里。

添加您的查询,以便我可以提供更多帮助。

于 2013-05-10T14:44:46.277 回答
0

inMySQL 5.6 更改了in子句的优化方法where(如解释在这里)。

如果您使用的是早期版本的 MySQL,那么它将in在输出中的每一行中执行子查询。您可以通过将 to 更改inexists子句来解决此问题:

select gc.*
FROM `gipeord_conjoint` gc
WHERE exists (select 1 from gestion_delegation.dataidentifpersonnel dip where dip.PPR = gc.COD_AG)

使用索引会更快gestion_delegation.dataidentifpersonnel(PPR)

于 2013-05-10T15:53:38.537 回答