php - MySQL 性能规划

标签 php mysql performance

我正在编写一个系统来搜索房地产列表的 MySQL 数据库。我担心性能问题,希望获得一些有关如何处理此问题的意见。

最常查询的表是“listings”表,将包含超过 600k 条记录和 86 列。随着列表的变化,该表还将每 30 分钟更新一次。

几乎每次搜索都会针对状态为“事件”的记录,这大约是 60 万条记录中的 1.5 万条。但是,我需要保留内部报告的所有记录。此外,每个查询可能会搜索各种参数(#beds、#baths 等),因此缓存可能不可行。

我正在考虑维护第二个表,其中包含标记为“事件”的记录的 PK。创建在列表的 PK 上连接的表的 View 。但是,我知道在某些条件下, View 的效率可能非常低。

我确实想过维护两个数据库,因为不活跃的列表不会被频繁搜索,并且需要较少的维护。

幸运的是它还没有投入生产,我有时间进行性能测试。另一件事是,这将托管在一个专用的 Linux 服务器上,前端用 PHP 编写。任何提供的见解都将受到高度赞赏。

最佳答案

我建议您创建一个归档表。您可以根据要求将流程设置为每 30 分钟运行一次或每天运行一次。

存档表将具有与原始表相同的列以及 EffDate 和 EndDate,其中包含记录处于事件状态时的日期/日期时间。

这样的表将使得在任何时间点重新创建历史记录成为可能——我确信这将被证明是有用的。

您将需要代码来创建它。基本逻辑是使用存档中的最新版本查找表中的每条记录(EndDate 为 nullid = id)。然后:

  1. 如果不存在新记录,则创建一条新记录,并将当前日期设置为 EffDate
  2. 如果存在且所有列都相同,则不执行任何操作。
  3. 否则更新存档记录上的 EndDate 并执行 (1)。
  4. 任何根本没有新记录的存档记录都应将 EndDate 设置为当前日期。

通常,我每天更新一次此类表格。

在执行此操作的代码中,我有一个丑陋的大查询(Excel 帮助我构建它),它进行比较并确定哪些记录是"new"、“已修改”和“已删除”。 “已删除”和“已修改”记录的当前 EndDates 设置为当前日期。然后,“新建”和“修改”记录将获得一条新记录,其 EffDate 设置为当前日期。

EndDateEffDate 的值可能比指定的值多或少,具体取决于更新的实际工作方式。例如,对于夜间更新,EffDate 可能会设置为明天,甚至设置为列表生效的日期。

关于php - MySQL 性能规划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757062/

相关文章:

php - 如何在php中ping ip地址并给出结果

php - 我一直收到错误 "syntax error, unexpected ' catch' (T_CATCH) "

php-zmq 段错误

mysql - 嵌套 mysql 查询的性能损失

php - Magento 文件路径错误

sql - ORM 性能成本

php - 在三元运算符中使用 return

php - 提交表单 PHP 修改为 JQuery AJAX

jQuery 动态 qtip 显示 div,但每次鼠标悬停都会变得越来越慢

java - Eclipse界面链接打开相关文件