mysql - 查询性能优化

  1. 使用explain进行分析

Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句。

比较重要的字段有:

  • select_type : 查询类型有:简单查询、联合查询、子查询等
  • key : 使用的索引
  • rows : 扫描的行数
  1. 优化数据访问

    1. 减少请求的数据量
    • 只返回必要的列,必要的行,
    • 缓存重复查询的数据
    1. 减少服务器端扫描的行数。使用索引来覆盖查询。
  2. 重构查询方式

1. 大查询切分

一个大查询如果一次性执行的话,可能一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小但重要的查询。

2. 大连接查询分解

SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id=tag.id
JOIN post ON tag_post.post_id=post.id
WHERE tag.tag='mysql';
SELECT * FROM tag WHERE tag='mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id IN (123,456,567,9098,8904);

将一个大连接查询分解成对每一个表进行一次单表查询,然后在应用程序中进行关联,这样做的好处有:

  1. 让缓存更能尽可能的使用。方便缓存的使用,方便的查询已经被缓存好的数据。如:①上面的sql查询,tag表中的相关的数据已经被缓存,那么就可以跳过第一个查询。上面的第三个查询的sql语句,in中要查询的记录就会少很多。减少冗余记录的查询(从相当于一个缓存拆分多个缓存的使用率来说)②缓存层中如果要修改表,表的字段改变,那就不能使用该关联后的查询了。(从稳定性来讲)
  2. 减少锁的竞争少了。
  3. 容易对数据库拆分,可扩展性好。
  4. 查询本身效率比之前提升

某些场景哈希关联的效率要高很多

你可能感兴趣的:(数据库)