gpt4 book ai didi

php - Mysql查询/服务器优化

转载 作者:行者123 更新时间:2023-11-29 00:01:42 25 4
gpt4 key购买 nike

最近我将 MySQL 版本从 5.5.8 更改为 5.6.23,并且遇到了一些查询性能问题。在旧的 MySQL 中;查询在某个合理的时间内执行,但在新的 freebsd 服务器+mysql 服务器中变得没有响应。 Linux命令

[linux~] top

执行查询时显示 mysql >100% wcpu。如果我分别执行每个子查询,结果会在几秒钟内获取。此时需要重启mysql和apache才能继续工作。

所以我的问题是优化下一个查询:

SELECT concat_ws('##', pos.name, 
( SELECT COUNT(*) FROM nalogi n
WHERE n.other_createtime >= '2015-03-01 00:00:00'
AND n.other_createtime <= '2015-03-31 23:59:59'
AND n.nalog_invalid = 'N' AND n.other_pos = pos.id ),
( SELECT COUNT(*) FROM nalogi n, posiljke_nalogi pn, posiljke p
WHERE p.other_createtime >= '2015-03-01 00:00:00'
AND p.other_createtime <= '2015-03-31 23:59:59'
AND pn.nalogid = n.id
AND pn.masterId = p.id
AND p.path_from_type = 'center'
AND n.nalog_invalid = 'N'
AND (p.path_to_type = 'pos' OR p.path_to_type = 'customer')
AND n.other_pos = pos.id )) 'entry' FROM spl_pos pos ORDER BY pos.id

目前我正在内存中使用索引和缓存表。欢迎任何速度优化或其他建议。

我在网上搜索并找到了一些不错的资源 source1 , source2以及我已经在现有查询中使用的许多其他内容。我还检查了我比较的字符串类型。根据经验,我在选择某些行时遇到了一些问题:

where x.field=field (slow)
where x.field="field" (much faster)

所以我也检查了那个,还有日期类型。现在我几乎没有更多的想法去尝试了。如果需要,我可以提供其他数据。

目前我正在通过单独执行查询来节省情况(我更愿意在一个查询中执行)。

最佳答案

我的一些建议:

  • 子查询创建的表不能使用索引,而您正在使用 2-3 个子查询。不好的做法!如果您使用的是大型表,创建临时表可能会很有效。
  • 您是否对查询进行了EXPLAIN 并查看了创建的临时表、文件排序等?尽量避免所有这些事情。
  • 关于 WHERE 子句,确保数据类型相同,如果列为“123”并且您正在比较 col1 = 123,则不会使用索引。

关于php - Mysql查询/服务器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com