`
scutephp
  • 浏览: 15448 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

优化MySQL,还是使用缓存?

阅读更多
今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比。换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过。

具体来说,我想比较的两种优化策略是优化mysql和缓存。提前指出,这些优化是正交的,唯一让你选择其中一者而不是另一者的原因是他们都耗费了资源,即开发时间。

优化MySQL

优化MySQL时,一般会先查看发送给mysql的查询语句,然后运行explain命令。稍加审查后很常见的做法是增加索引或者对模式做一些调整。

优点

1、一个经过优化的查询对于所有使用应用的用户来说都是快速的。因为索引通过对数复杂度的速度来检索数据(又名分制,正如你搜索一个电话簿一样,逐步缩小搜索范围),而且随着数据量的递增也能维持良好的性能。对一个未经索引化的查询的结果做缓存随着数据的增长有时候则可能会表现得更差。随着数据的增长,那些未命中缓存的用户可能会得到很糟糕的体验,这样的应用是不可用的。

2、优化MySQL不需要担心缓存失效或者缓存数据过期的问题。

3、优化MySQL可以简化技术架构,在开发环境下复制和工作会更加容易。

缺点

1、有一些查询不能光通过索引得到性能上的改善,可能还需要改变模式,在某些情况下这对于一些应用可能会很麻烦。

2、有些模式的更改可能用于反规范化(数据备份)。尽管对于DBA来说,这是一项常用的技术,它需要所有权以确保所有的地方都是由应用程序更新,或需要安装触发器来保证这种变化。

3、一些优化手段可能是MySQL所特有的。也就是说,如果底层软件被移植到多个数据库上工作,那么很难确保除了增加索引外一些更复杂的优化技术可以通用。

使用缓存

这种优化需要人来分析应用的实际情况,然后将处理代价昂贵的部分从MySQL中剥离出来用第三方缓存替代,比如memcached或redis

优点

1、缓存对于一些MySql自身很难优化的查询来说会工作地很好,比如大规模的聚合或者分组的查询。

2、缓存对于提高系统的吞吐率来说可能是个不错的方案。比如对于多人同时访问应用时响应速度很慢的情况。

3、缓存可能更容易构建在另一个应用之上。比如:你的应用可能是另一个用MySQL存储数据的软件包的前端,而要对这个软件包做任何数据库方面的改动都非常难。

缺点

1、如果数据对外提供多种存取范式(例如,在不同的页面上用不同的形式展示),那么让缓存过期或者更新可能会很难,同时/或者可能需要容忍已过期的数据。一个可行的替代方案是设计一套更加精细的缓存机制,当然它也有缺点,即多次获取缓存会增加时延。

2、缓存一个产生代价昂贵的对象对于那些未命中缓存的用户(见优化MySQL的优势#1)而言可能会产生潜在的性能差异。一些好的性能实践表明你应该尽量缩小用户之间的差异性,而不仅仅是平均化(缓存倾向于这么做)。

3、幼稚的缓存实现无力应对一些微妙的漏洞,比如雪崩效应。就在上周我帮助了一个人,他的数据库服务器被多个试图同时再生同样缓存内容的用户请求冲垮。正确的策略是引入一定级别的锁来将缓存再生的请求序列化。

原文链接:http://www.kubiji.cn/juhe-id5534.html
分享到:
评论

相关推荐

    优化MySQL,还是使用缓存?

     具体来说,我想比较的两种优化策略是优化MySQL和缓存。提前指出,这些优化是正交的,让你选择其中一者而不是另一者的原因是他们都耗费了资源,即开发时间。  优化MySQL  优化MySQL时,一般会先查看发送给...

    MysqL缓存的解决方案

    "MySQL缓存的解决方案" MySQL 缓存是提高数据库性能的一种重要手段,它可以减少数据库的读写次数,从而提高系统的整体性能。以下将对 MySQL 缓存的解决方案进行详细的介绍。 缓存的必要性 缓存的主要目的是减少...

    MySQL优化之缓存优化(续)

    MySQL缓存优化是数据库性能提升的关键一环,尤其在高并发和大数据量的场景下,合理利用缓存能显著减少磁盘I/O操作,提高查询速度。本文将深入探讨MySQL中的各种缓存机制及其优化策略。 首先,我们关注的是查询缓存...

    mysql缓存优化

    ### MySQL缓存优化详解 #### 一、MySQL存储引擎概览与选择 ##### 1.1 存储引擎类型 MySQL 提供了多种存储引擎,每种引擎都有其独特的优势和适用场景。以下是最常见的几种存储引擎: - **MyISAM**:MySQL 的默认...

    MYSQL优化-一篇很好的优化文章

    19. MYSQL缓存 20. MYSQL表高速缓存工作原理 21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用SHOW PROCESSLIST 26. 如何知晓MYSQL解决...

    MySQL缓存研究

    通过对MySQL缓存的深入研究,我们可以理解缓存在数据库性能中的关键作用,学习如何调整和优化缓存以适应不断变化的业务需求,从而提升系统的整体性能和响应时间。这不仅可以减轻数据库服务器的压力,还能为用户提供...

    mysql优化笔记+资料

    优化MySQL是提升系统性能、减少资源消耗和提高响应速度的关键。以下是一份详细的MySQL优化笔记,涵盖了多个方面: 一、查询优化 1. 使用索引:为经常用于搜索的列创建索引可以显著加快查询速度。B树和哈希索引是最...

    Mysql 缓存

    MySQL数据库系统在处理查询时,为了提高性能,使用了多种缓存机制,其中最常见的是查询缓存(Query Cache)。本文将深入探讨MySQL的查询缓存功能,以及如何通过全局变量`global_query_cache_size`来调整其大小。 ...

    2G内存的MYSQL数据库服务器优化

    ### 2G内存的MySQL数据库服务器优化 在IT行业中,对于资源有限的环境进行数据库优化是一项挑战性工作,尤其是在仅有2GB内存的情况下对MySQL数据库服务器进行优化。这种优化旨在提高性能的同时确保系统的稳定运行。 ...

    MySQL优化,启动mysql缓存机制

    不过,这样的话不能在MySQL的授权表中使用主机名了而只能用ip格式。  2,设置连接数,mysql默认的连接数是100,太少了。  [mysqld]下面添加  max_connections=512  3,开启缓存机制  skip-locking#取消...

    MySQL DBA教程:Mysql性能优化之缓存参数优化

    MySQL 数据库性能优化是DBA工作中的核心任务之一,尤其对于IO密集型的数据库系统,内存缓存的优化显得尤为重要。本教程将聚焦于MySQL的缓存参数优化,旨在通过调整相关参数,最大化利用内存资源,减少磁盘IO,从而...

    MySQL数据库优化SQL篇PPT课件.pptx

    例如,使用索引、优化数据库结构、使用缓存等。这些技巧可以帮助我们提高数据库的性能和效率。 本PPT课件对MySQL数据库优化的重要知识点进行了详细的讲解,并提供了许多实用的优化技巧和方法。通过学习本PPT课件,...

    mysql性能优化.pptx

    MySQL性能优化是一个涵盖广泛的主题,涉及多个层面,包括SQL语句优化、索引优化、数据库表结构优化、系统级配置优化以及服务器硬件优化。以下是对这些方面进行详细说明: 1. **SQL语句优化** - **慢查询日志**:...

    Mysql数据库优化详细大全

    19. MYSQL缓存 8 20. MYSQL表高速缓存工作原理 9 21. MYSQL扩展/优化-提供更快的速度 9 22. MYSQL何时使用索引 10 23. MYSQL何时不使用索引 10 24. 学会使用EXPLAIN 10 25. 学会使用SHOW PROCESSLIST 11 26. 如何...

    MySQL性能优化的最佳21条经验

    MySQL是世界上最受欢迎的关系...以上21条经验旨在帮助开发者更好地理解和优化MySQL的性能,通过这些实践,可以显著提升数据库的响应速度和整体系统的效率。在实际应用中,应结合具体业务场景灵活运用,不断调整和优化。

    mysql优化/pdf

    mysql优化 # MySQL优化 MySQL是一种流行的开源关系型...可以使用MySQL自带的查询缓存或者使用外部缓存工具,如Memcached。 ## 6. 使用分区 分区可以将大型表分解成更小的、更易于管理和查询的部分。这可以提高查

    mysql高级优化查询

    根据提供的文件信息,我们可以深入探讨 MySQL 的高级优化查询这一主题,包括其查询缓存原理以及 MySQL 的内部机制等核心知识点。 ### 一、MySQL 查询缓存原理 #### 1.1 什么是查询缓存 查询缓存是 MySQL 中用于...

    mysql5.6性能优化

    #### 五、优化MySQL服务器 在服务器层面上进行优化同样至关重要,这包括但不限于内存配置、磁盘I/O优化以及网络配置等。 - **内存配置**:合理设置缓存和缓冲区大小,比如`innodb_buffer_pool_size`等参数。 - **...

Global site tag (gtag.js) - Google Analytics