企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
- 最直接的就是加索引, 加缓存。分库分表分区,读写分离用得少 - 对sql语句进行优化 - 查询的时候不要直接select * - 用覆盖索引,索引下推能减少回表次数 - like 前面加%, 用到 or , not, != 索引字段用到函数,数据类型不匹配,数据分布不均匀 会使索引失效 - 组合索引不符合最左匹配原则,前一个字段用了范围查询, 可能会使后面的索引字段失效 - 减少子查询(返回条数越多性能影响越大),使用关联查询(left join,right join,inner join)替代 - 关联查询的时候小表驱动大表,小表作为主表 - MySQL 的查询优化器会根据不同的情况选择最佳的执行计划。在某些情况下,当索引扫描的行记录数超过了一定比例(通常是在 10% 到 30% 之间),优化器可能会放弃使用索引,而选择执行全表扫描 - 存储过程-预编译提高性能减少网络开销 - 分页优化 - ``` SELECT \* FROM employees LIMIT 10000, 20; 改进后 SELECT \* FROM employees WHERE id > 10000 LIMIT 20; ``` - 原始查询使用了 `LIMIT 10000, 20`,这意味着数据库需要跳过前面的 10000 条记录,然后再返回接下来的 20 条记录,这可能会导致性能问题,特别是在数据量很大的情况下。改进后的查询 `SELECT * FROM employees WHERE id > 10000 LIMIT 20` 利用了索引(假设 `id` 字段已经被索引了),避免了跳过大量的记录,而是直接基于 `id` 字段的值进行筛选,因此性能更好 --- - union all 去重(额外开销), union 不去重 - 普通索引, 用 like 前面加 % 会使索引失效, 没有% * 可以用全文索引处理 - or 会使索引失效(or 的查询尽量用 union或者union all 代替 (union 会做去重处理, 性能差些)), a or b 的情况下, 有 a 索引 或 a,b组合索引, 有可能会走全表扫描。 - 分页优化 > ### 相关阅读 * [MySQL优化:12种提升SQL执行效率的有效方法](https://www.cnblogs.com/souyunku/p/17954476)\] * [Mysql性能优化这5点你知道吗?简单却容易被初学者忽略!](https://www.cnblogs.com/JavaBuild/p/17952589) * https://mp.weixin.qq.com/s/3flO4IpZ0E1Fz6ljxXycMw