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

时间:2012-03-27 12:55:39

标签: php mysql database

我的网站使用的数据库包含超过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秒内执行。

5 个答案:

答案 0 :(得分:5)

购买专用服务器。

答案 1 :(得分:2)

相对而言,150万条记录并不大。问题是LIKE'%word%'这个子句在处理方面非常昂贵。特别是如果字段是TEXT字段而没有索引。

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

[我假设“OR 0”)接近查询结尾只是打字错误]

答案 2 :(得分:1)

听起来你的查询可能效率很低。值得检查您执行的查询,看看是否可以减少 - 通过执行连接,缓存不经常更改的数据,或者只是更加聪明地收集和使用数据避免不必要的查询

答案 3 :(得分:1)

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

这是一个可以运作的一般概念,但它实际上取决于你正在做什么。

答案 4 :(得分:0)

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

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

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