我每30秒对MySQL数据库运行以下查询:
SELECT message.id FROM message WHERE userto='13689' AND tstampviewed IS NULL AND message.status != 'VOID';
它在我的慢速查询日志中出现了很多,但在我看来,它是尽可能优化的。
EXPLAIN的结果:
SELECT_TYPE =简单
TABLE =消息
TYPE = ref
POSSIBLE_KEYS = userto,tst,stat
KEY = userto
KEY_LEN = 53
REF = const
ROWS = 1
EXTRA =“使用位置”
密钥userto,tst和stat都是正常的BTREE索引,对于查询的whereclause中引用的每个varchar字段都有一个索引。它是一个有300K行的MyISAM表。用户确实一致地写入表,但读取的可能性更大(读取与写入的比率为10/1)。数据库服务器是Windows 2008 Enterprise,具有大量CPU和快速驱动器。
在过去的一个月里,我们不断收到max_connection错误,即使我将max_connections从750增加到1500.一天几次,似乎查询挂起(我无法验证这个,因为我没有访问权限)实时进入进程列表),1500个查询在其后面堆积并最大化连接。这显然会导致很多其他问题。
上面的查询是在慢查询日志中出现的问题,尽管我认为它尽可能地优化了。任何人都可以告诉我,或者指出我正确的方向来解决这个问题吗?
提前致谢。
答案 0 :(得分:0)
问题不在于查询 - 您正在打开与数据库的连接而不是关闭它,而是每次都打开一个新连接。