改善PHP MYSQL查询性能或服务器问题?

时间:2011-08-20 21:33:37

标签: php mysql performance

我有这个问题:

SELECT
a.codigo AS code, a.nome AS name, a.especialidade AS expertise, a.telemovel1 AS mobile, a.email AS email, a.codigopostal AS zipcode
FROM table_name_a a
WHERE a.nome != ''
AND a.codigo!='5555555'
AND a.codigo!='705416'


UNION ALL

SELECT
b.cod AS code, b.nome AS name, b.especialidade AS expertise, b.telem1 AS mobile, b.mail AS email, b.cp AS zipcode
FROM table_name_b b
WHERE b.nome != ''
AND b.cod!='5555555'
AND b.cod!='705416'
AND b.cod NOT IN(SELECT assoc.codigo from table_name_a assoc) 

ORDER BY code ASC

表A: +/- 6000行(并且正在增长)

表B: +/- 2000行(并且正在增长)

问题:

当一个或两个用户对数据库进行多次查询时使用服务器时,此查询运行正常......但是当使用服务器时,可以说白天有10个用户进行多次查询,大约+ / - 在任何给定时间执行某些查询的1000个客户端,查询来自:

显示0到29行(总计7,138,查询占用0.0734秒)

显示0到29行(总计7,138,查询耗时100.0933秒)

问:

这是查询性能问题还是问题出在服务器配置/性能上?

编辑:


tables indexes

字段类型:

cod,codigo - > INT(11)

nome,telemovel1,telem1,especialidade,codigopostal,cp - > VARCHAR(200)

电子邮件 - > VARCHAR(400)

EXPLAIN QUERIES:


Explain Question Query and Query From Karolis

2 个答案:

答案 0 :(得分:0)

我建议你改写一下:

AND b.cod NOT IN (SELECT assoc.codigo from table_name_a assoc) 

进入这个:

AND NOT EXISTS (SELECT * FROM table_name_a assoc WHERE assoc.codigo = b.cod)

重写的查询应该使用更少的内存,留下更多内存用于并发进程。

答案 1 :(得分:0)

要尝试查找如何验证查询,您应该获得查询计划。这将确定使用哪些索引以及如何改进它。请参阅MySql中的EXPLAIN关键字。

掌握了这些信息,您可以确保拥有正确的索引。你也可以考虑临时表。