【问题标题】:Measures to improve execution time of a database query提高数据库查询执行时间的措施
【发布时间】:2014-04-18 05:54:26
【问题描述】:

使用 twitter bootstrap typeahead

我已经在 source 的 typeahead 中给出了一个 php 页面“getItems.php”的路径。

getItems.php 从 3 个表中获取结果:-

SELECT pm . * , p.pname, pc.cid
FROM products p, products_mrp pm, products_category pc
WHERE p.pid = pm.pid
AND p.pid = pc.pid
AND p.pname like '%$text%' limit 7

执行此查询大约需要 22 秒。

  • 表products有654行
  • 表 products_category 有 629 行
  • 表 products_mrp 有 712 行

我可以做些什么来减少提取时间?因为 22 秒等待自动完成是没有意义的。

【问题讨论】:

  • 该查询中应该有一个 JOIN .. 你真的得到了正确的结果吗??
  • 是的,我得到了正确的结果

标签: php mysql sql performance twitter-bootstrap


【解决方案1】:

首先,您的表是否设置了索引?这绝对是提高数据库速度的最简单方法。 Read up on the details here.

我建议使用MySQL Tuning Primer Script located here。非常易于使用,建议也很到位。

根据您的设置,您可能需要学习如何手动调整性能——这意味着您要学会自己解释 MySQL 输出并对其采取行动——但是这个脚本对于我曾经使用过的 95% 的设置都非常有效.另外 5% 是需要更多定制服务的数据库特殊设置。我强烈推荐像this one on the MySQL performance blog 这样的教程。

【讨论】:

    【解决方案2】:

    需要更多信息...

    为每个表显示 CREATE TABLE。

    各种 xid 是每个表中的 PRIMARY KEY 吗?如果它们不是(也不是任何其他类型的索引),那么这将解释缓慢。

    使用显式 JOIN 更简洁,而不是“逗号连接”:

    FROM products p
    JOIN products_mrp pm ON p.pid = pm.pid
    JOIN products_category pc ON p.pid = pc.pid
    

    【讨论】:

      【解决方案3】:

      希望您对此问题有所了解。 请参考以下文档并确保输入数据库类型。 4 Query Optimizer Concepts

      【讨论】:

        猜你喜欢
        • 2021-08-17
        • 2011-03-11
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多