我的网站使用的数据库包含超过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秒内执行。
答案 0 :(得分:5)
购买专用服务器。
答案 1 :(得分:2)
相对而言,150万条记录并不大。问题是LIKE'%word%'这个子句在处理方面非常昂贵。特别是如果字段是TEXT字段而没有索引。
[我假设“OR 0”)接近查询结尾只是打字错误]
答案 2 :(得分:1)
听起来你的查询可能效率很低。值得检查您执行的查询,看看是否可以减少 - 通过执行连接,缓存不经常更改的数据,或者只是更加聪明地收集和使用数据避免不必要的查询
答案 3 :(得分:1)
根据您的情况,您可能会破坏表格以缩小查询。例如,如果您知道来自某个国家/地区或某个页面的用户只需要符合特定条件或具有某些属性的记录,您可以提前将它们指向正确的表并缩小行的大小。查询。
这是一个可以运作的一般概念,但它实际上取决于你正在做什么。
答案 4 :(得分:0)
该查询根本不会执行,因为它在语法上不正确。
我不是数据库优化方面的专家,但我知道所有这些通配符都需要很长时间才能完成。 2秒是数据库查询执行术语中的生命周期。拥有id!= $ id也是一个非常密集的条件。
编辑:你有a,b等索引吗?它们可以对速度产生很大的影响。您的多个“OR”将减慢查询速度。也许您可以将其分解为多个查询并使用PHP执行您想要的操作?