mysql - 需要帮助重写缓慢的 mysql 查询
问题描述
我有 2 个缓慢的 MySQL 查询:
SELECT count(N) as c, mW as move, move.fenW as fen FROM move,opening,book WHERE move.fenW LIKE BINARY ‘S’ AND move.oid=opening.id AND opening.bid=book.bid AND book.is_deleted=N AND opening.deleted=N AND mW!=‘S’ AND book.published=N GROUP BY mW ORDER BY c DESC
和
SELECT count(N) as c, mB as move, move.fenB as fen FROM move,opening,book WHERE move.fenB LIKE BINARY ‘S’ AND move.oid=opening.id AND opening.bid=book.bid AND book.is_deleted=N AND opening.deleted=N AND mB!=‘S’ AND book.published=N GROUP BY mB ORDER BY c DESC
这些查询导致网站速度加载显着延迟。我正在寻找有关如何改进/重写这些查询以提高网站加载速度和性能的建议。
解决方案
您的 like 运算符可能会减慢此查询的速度。让我们先过滤您的表,然后再加入其他表。
SELECT count(N) as c
, m.mB as move
, m.fenB as fen
FROM
(SELECT mB, fenB, oid FROM move WHERE m.fenB LIKE BINARY ‘S’ AND mB!=‘S’) m
INNER JOIN opening o on m.oid = o.id AND o.deleted=N
INNER JOIN book b on o.bid=b.bid AND b.is_deleted=N AND b.published=N
GROUP BY m.mB
ORDER BY c DESC
推荐阅读
- android - 检查 VPN 状态已连接或未连接
- reporting-services - SSRS 错误:本机编译器返回值:“[BC42206] 超出最大警告数。”
- react-redux - 不同组件之间的页面加载和状态依赖
- php - 尝试使用递归目录迭代器列出文件和文件夹
- c++ - 如果在 .h 文件中将变量定义为“静态”怎么办?
- arrays - 如何使用相同的键对嵌套哈希和数组中的值进行分组和添加?
- c# - .exe.manifest 没有成功
- html - justify-items 如何在 display:block 元素上工作
- python - 用于检查字符串中的运算符的函数
- performance - 为什么我的 for 循环代码比迭代器慢?