【问题标题】:Speed of response of an sql query in a big mysql database大型mysql数据库中sql查询的响应速度
【发布时间】:2013-05-10 14:37:59
【问题描述】:

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

这是我的查询:

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

gipeord_conjoint 和dataidentifpersonnel 这两个表在两个不同的数据库中,这是第一个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

... ...

【问题讨论】:

  • 300K 记录对于数据库来说并不是很大...但是,可能导致这种情况的因素有很多(您是否在查询中进行连接,哪些数据构成了列,您是否有适当的索引,您是否使用 LIKE %xxx%) 之类的东西,而没有看到您的查询和表结构,对此无法提供太多帮助。
  • 好吧,您应该告诉我们更多有关您的表架构(字段、索引等)的信息,并向我们展示您的查询。很难告诉你如何优化我们一无所知的东西......
  • @Souad 看看您的查询,您将永远等待获取值。
  • @souad 不要将查询作为评论发布,您可以编辑您的问题!
  • 好的,看看我上面的问题

标签: mysql sql time


【解决方案1】:

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


这就像说:

您好,我的电脑比平时慢,您能解释一下原因吗?

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

就您当前的情况而言,300,684 条记录并没有那么多,所以这不是查询缓慢的原因。

在我的头顶:

  • 您的查询可能未优化。看看execution plan。 (我会寻找表格扫描)
  • 确保您有正确的索引。
  • 看看有多少人同时运行请求。
  • 检查谁在查询数据库以及查询来自何处。

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

【讨论】:

  • 我的数据库仅供我使用。我在编辑后在问题中添加了查询。
【解决方案2】:

MySQL 5.6 在where 子句中更改了in 的优化方法(如here 解释)。

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

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) 上的索引会更快。

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 2021-04-24
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多