一页中5个查询的性能问题

时间:2018-03-13 11:32:25

标签: php mysql performance filter

由于我是一名初级PHP开发人员,日复一日地陷入了这里描述的性能问题: 我正在用PHP创建一个搜索引擎,我的数据库有一个包含41列和百万行的表,显然它是一个非常大的数据集。在index.php我有一个搜索数据的表单。当用户输入搜索关键字并点击提交时,操作位于search.php上,结果如此。查询是这样的。

SELECT * FROM TABLE WHERE product_description LIKE '%mobile%' ORDER BY id ASC LIMIT 10

这是第一个查询。结果显示我必须运行4个其他查询:

SELECT DISTINCT(weight_u) as weight from TABLE WHERE product_description LIKE '%mobile%'
SELECT DISTINCT(country_unit) as country_unit from TABLE WHERE product_description LIKE '%mobile%'
SELECT DISTINCT(country) as country from TABLE WHERE product_description LIKE '%mobile%'
SELECT DISTINCT(hs_code) as hscode from TABLE WHERE product_description LIKE '%mobile%'

这些查询适用于FILTERS,问题是当我提交搜索按钮时,所有查询都以性能问题为代价同时运行,其速度非常慢。
是否有任何其他方法来获取weight,country,country_unit,hs_code调速器或如何实现它。

这里实现了相同的功能,其中过滤条在表格填充数据之后,如何实现它。请帮助

Full Functionality implemented here.

我试图解释我的完整问题,如果有任何错误请告诉我,我会改进这个问题,我也是stackoverflow的新手。

2 个答案:

答案 0 :(得分:0)

首先 - 您确定此代码按预期工作吗?第一个查询将检索与您的搜索词匹配的10条记录。这些记录可能有重复的weight_ucountry_unitcountryhs_code值,因此当您为过滤器执行接下来的4个查询时,它完全有可能您将在第一个查询中获得 not 的值,因此过滤器可能没有意义。

如果这是真的,我会在您的客户端代码(PHP)中创建过滤器值 - 查找10条记录中的唯一值将变得快速而简单,并减少数据库往返次数。

最后,您可以做的最大改进是使用MySQL的fulltext searching功能。您的应用程序运行缓慢的原因是因为您的搜索字词无法使用索引 - 您可以在开始和结束时进行疯狂梳理。这就像在电话簿中搜索姓名包含" ishra" - 你必须查看每个记录以检查匹配。全文搜索索引就是为此而设计的 - 它们也有助于模糊匹配。

答案 1 :(得分:-1)

在查询大型数据集或大多数数据集时,我会给你一些在许多情况下都很有用的提示。

  • 如果您可以列出您想要的字段而不是查询“*”是一种更好的做法。当您有更多列和更多行时,此权重会增加。

  • 始终尝试使用PK来查找数据。过滤器越具体,成本就越低。

  • 这种情况下的索引会非常方便,因为它会使搜索变得更加敏捷。

  • LIKE查询通常非常慢且资源丰富,在您的情况下更多。所以,你越具体,就会越好。

  • 另外补充一点,如果你只是想一次又一次地从这些表中检索数据,也许VIEW很适合。

这些只是我想到的一些提示,以缓解您的问题。 希望它有所帮助。