我有这个问题:
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秒)
问:
这是查询性能问题还是问题出在服务器配置/性能上?
编辑:
字段类型:
cod,codigo - > INT(11)
nome,telemovel1,telem1,especialidade,codigopostal,cp - > VARCHAR(200)
电子邮件 - > VARCHAR(400)
EXPLAIN QUERIES:
答案 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
关键字。
掌握了这些信息,您可以确保拥有正确的索引。你也可以考虑临时表。