我需要关于数据库问题的建议


I need sugestions about database problems

我有一个网站,它使用的数据库有150多万条记录。现在我到了一个地步,网络托管公司暂停我的网站一段时间。原因是对服务器执行的查询会使系统过载。请给我一些关于如何解决它的建议!

查询示例:

SELECT id,a,b,c,d,e,f 
FROM table 
WHERE a LIKE '%GHEORGHE%' OR b LIKE '%GHEORGHE%' 
   OR c LIKE '%GHEORGHE%' OR  a LIKE '%GHE.%' OR b LIKE '%GHE.%' 
   OR c LIKE '%GHE.%' OR  a LIKE '%AURELIA%' 
   OR b LIKE '%AURELIA%' OR c LIKE '%AURELIA%' OR a LIKE '%PERSOANA%' 
   OR b LIKE '%PERSOANA%' OR c LIKE '%PERSOANA%' OR 0) 
   AND id != $id 
ORDER BY f ASC 
LIMIT 10

此查询将在2秒内执行。

购买一台专用服务器。

相对而言,150万条记录根本不算大。问题是LIKE子句"%word%"在处理方面非常昂贵。特别是如果字段是TEXT字段且未编制索引。

  • 如果可能,为搜索的所有字段创建索引
  • 如果可能,请简化WHERE条件。例如LIKE"%GHE.%"可能会更改为LIKE"%GHE%",并且如果LIKE"%GHE%"已经满足搜索条件,则不再需要LIKE"

[我假设查询末尾的"OR 0)"只是一个打字错误]

听起来您的查询可能效率很低。值得检查一下您执行的查询,看看是否可以通过执行联接、缓存不会经常更改的数据,或者只是在如何收集和使用数据以避免不必要的查询方面更聪明一点,来减少开销。

根据您的情况,您可能会分解表以缩小查询。例如,如果您知道某个国家/地区或某个页面上的用户只需要符合特定条件或具有特定属性的记录,则可以提前将它们指向正确的表,并缩小查询的行的大小。

这是一个可行的总体想法,但这实际上取决于你在做什么。

该查询根本不会执行,因为它在语法上不正确。

我不是数据库优化专家,但我知道所有这些通配符都需要很长时间才能通过。在DB查询执行术语中,2秒是生存期。有id!=$id也是一个需要检查的非常密集的条件。

编辑:你有a、b等的索引吗?它们可以对速度产生很大的影响。您的"OR"倍数会减慢查询速度。也许您可以将其分解为多个查询,并使用PHP执行您想要的操作?