mysql的优花其实是个艰难的工作,要搞的东西太多了,之前在http://www.cnblogs.com/jackyrong/archive/2008/05/04/1182331.html
中摘了一些原则,最近对一个100多万条数据的表做优花时,有如下心得:
1) 取必须要用的数据
这里对于select 语句中只选有用的字段,这样的原则就肯定人人都知道的了。但关键的是,要从全局考虑问题,比如我的这个应用
是每个新闻网页的跟帖,一条新闻有很多很多人跟帖,平均有40-50条,那么每天这么多新闻,很多的跟帖记录,但对于审帖
者,由于是每天上班工作的,每天他们会把当天的帖子审核掉,因此,在做记录列表时,只需要选用出当前时间以内1-2天的记录就可以了,
这里已经是大大优化
2 ) 建好索引
这里的学问太多,也太多文章讲,这里不说
3 ) MYSQL的优化
第三个工作才是MYSQL的优化,其实就是改my.ini,有如下几点,归纳下.(我的是4G内存的双核机器)
A 设置key_buffer_size
key_buffer_size指定索引缓冲区的大小,这个值越高,索引可以使用的内存越多,一般为可用内存的25-30%,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。
key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)。
B max_connections数量
MYSQL建议使用table_cache=max_connection*N来设置tablecache,N为标准连接中表的数量
C table_cache
table_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
对于有1G内存的机器,推荐值是128-256。
D 提高order by groud by的速度,通过设置sort_buufer变量进行控制,还可以增加read_rnd_buffer_size变量值,也可以增加read_buffer_size值,提高select的查询速度
E query_cache_size
从4.0.1开始,MySQL提供了查询缓冲机制。使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
通过检查状态值Qcache_*,可以知道query_cache_size设置是否合理(上述状态值可以使用SHOW STATUS LIKE ‘Qcache%’获得)。如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,如果Qcache_lowmem_prunes增长迅速,意味着很多缓存因为内存不够而被释放,而不是因为相关表被更新。尝试加大query_cache_size,尽量使Qcache_lowmem_prunes零增长。
如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲
分享到:
相关推荐
浅谈 MySQL 中优化 SQL 语句查询常用的 30 种方法 MySQL 是一种广泛使用的关系数据库管理系统,优化 SQL 语句查询是提高数据库性能的关键。下面是浅谈 MySQL 中优化 SQL 语句查询常用的 30 种方法: 一、避免全表...
### 浅谈MYSQL中的索引优化 #### 一、MySQL中的索引与B+树 在MySQL数据库系统中,索引被广泛应用于提高数据检索的效率。索引本质上是一种数据结构,它允许用户快速定位数据库中的记录。在MySQL中,B+树是最常见的...
MySQL索引优化分析是数据库管理员和开发人员必须掌握的关键技能,因为它直接影响到数据库的查询性能和整体效率。在MySQL中,索引是一种特殊的数据结构,用于加速数据检索。当正确地设计和使用时,索引能够显著提高...
MySQL的索引设计是数据库优化的关键环节,它直接影响到数据查询的效率。下面将详细讨论索引设计原则以及常见索引的区别。 首先,选择唯一性索引是非常重要的原则。唯一性索引确保了索引项的唯一性,有助于快速定位...
### 浅谈互联网+下的学习平台构建 #### 一、“互联网+”背景下构建学习平台问题的提出 在“互联网+”背景下,构建学习平台成为推动教育现代化的重要手段。这一概念强调的是利用互联网技术和资源,结合现代教育理论...
在“架构革新高效可控_浅谈数据库服务和架构演讲V7.zip”这个压缩包中,包含了一份关于数据库服务和架构的演讲稿,标题为“架构革新高效可控”。这份文档可能详细探讨了如何通过架构的创新来提升数据库服务的效率和...
除了基本的JDBC方法,还可以使用连接池(如C3P0、Apache DBCP或HikariCP)来优化性能和管理数据库连接。连接池预先创建一定数量的连接,并在需要时分配给应用程序,从而减少了每次打开和关闭连接的开销。 安全方面...
总之,梁敬彬大师的《赢在起点-数据库设计规范》深入浅出地讲解了数据库设计的关键点,对于从事Oracle、MySql、DB2数据库工作的专业人士,是不可多得的学习资料。通过理解和应用这些规范,可以提高数据库的稳定性和...
浅谈 Java 中 Mysql 数据库的连接与操作[J]. 信息记录材料,2020,21(02):144-145. * [6] 邹 青 松 . 计 算 机 软 件 Java编 程 特 点 及 其 技 术 运 用 [J]. 黑 龙 江 科学,2020,11(06):62-63. * [7]王晓燕.谈 ...
浅谈 Java 在计算机软件开发中的应用[J]. 电脑知识与技术, 2021, 17(24):81-82. - 陈莲. 基于 Java 的 Web 开发技术[J]. 电子技术与软件工程, 2021, (16):43-44. - 王晓燕. MySQL 查询的基本原则[J]. 办公自动化, ...
3.11.6 只读字段的命名原则 3.11.7 参数名 3.11.8 委托命名原则 3.12 小议设计模式 3.12.1 什么是设计模式 3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第 4 章 ASP.NET 的网页代码模型及生命周期 4.1...
3.11.6 只读字段的命名原则 3.11.7 参数名 3.11.8 委托命名原则 3.12 小议设计模式 3.12.1 什么是设计模式 3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ...
3.11.6 只读字段的命名原则 3.11.7 参数名 3.11.8 委托命名原则 3.12 小议设计模式 3.12.1 什么是设计模式 3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ...
3.11.6 只读字段的命名原则 3.11.7 参数名 3.11.8 委托命名原则 3.12 小议设计模式 3.12.1 什么是设计模式 3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ...
3.11.6 只读字段的命名原则 3.11.7 参数名 3.11.8 委托命名原则 3.12 小议设计模式 3.12.1 什么是设计模式 3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ...
3.11.6 只读字段的命名原则 3.11.7 参数名 3.11.8 委托命名原则 3.12 小议设计模式 3.12.1 什么是设计模式 3.12.2 为什么要使用设计模式 3.12.3 改装现有类 3.13 小结 第4章 ASP.NET的网页代码模型及生命周期 4.1 ...