【发布时间】:2013-07-10 19:49:55
【问题描述】:
我有一个包含 3 列的表:submission_id、column_id、data。每个submission_id 有25 列和数据值。
我有一个页面显示所有提交,其中 column_id = 16 和 data = ('' or 0)。为此,我使用子查询来获取我需要的所有不同的submission_id,然后获取主查询中的所有列。我的查询是:
SELECT sid,cid,data FROM webform_submitted_data WHERE sid in(select distinct sid from webform_submitted_data where cid=16 and data in (' ',0)) ORDER BY sid ASC
表变大了,现在从 PHP 运行查询需要 30-40 秒(虽然从 MYSQL 只需要 1.0e-6 秒)这不是 PHP 开销,我使用 mysqld-slow.log 文件检查,我得到以下信息:
我还尝试在 PHP 中运行解释 ![解释]:(http://i.imgur.com/692eyHf.png)
还有一件事,这个页面更新了当前提交,并在 column_id 16 中放置了一个 ID 值,当它重新加载时,它会从页面中删除。没有更新的重新加载需要不到一秒的时间,但是当我们需要更新 100 条记录时,它每次都会重建缓存。
任何想法将不胜感激。
【问题讨论】:
-
我的 SQL 有点生疏,但我没有看到那里需要子查询。你所拥有的与
SELECT sid,cid,data FROM webform_submitted_data WHERE cid=16 and data in (' ',0) ORDER BY sid ASC不完全一样吗? -
你是如何在 PHP 中运行查询的?您决定使用的 API 是否具有准备 SQL 的“准备”方法?这可能会有所帮助……也许。 (我猜)
-
具有 cid=16 的 where 子句不允许其他 cid 出现在结果中
-
@brett_m - 啊,谢谢!
标签: php mysql sql query-performance load-time