- 浏览: 1521383 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
MySQL性能优化TIPS
周三, 2006/09/20 - 21:30 — yejr
<script language="javascript" src="/misc/cr.js" type="text/javascript"></script>
作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究。
一. 启动参数优化
修改 my.cnf (或者my.ini),加入/修改以下几行
#设定缓存的连接数,节省连接时的开销 back_log = 64 #禁用文件系统外部锁 external-locking = 0 #禁用BDB,如果你确实不需要的话,innodb也是如此 skip-bdb #索引缓冲,如果是专用的数据库服务器,可以设置高达服务器内存的一半,如果不是专用的, #还是设置得低一点 key_buffer = 512M #缓存数据表数量,如果内存较大,可以设置稍微高一点,否则还是设置低一点 #设置这个参数可以参见系统状态中的 open_tables(表示当前打开的数据表总数) #和 opened_tables(表示所有打开的数据表总数) table_cache = 128 #禁用dns解析,如果你的授权信息中采用dns授权方式了,就不能启用该选项 skip-name-resolve #记录慢查询和没有使用索引的查询,便于帮助分析问题所在 long_query_time = 1 log-slow-queries = /usr/local/mysql/data/slow.log log-queries-not-using-indexes
其他参数诸如 sort_buffer_size,net_buffer_length,read_buffer_size,read_rnd_buffer_size,myisam_sort_buffer_size,
等请查询MySQL手册,然后做出合适的调整.
thread_cache_size,query_cache_size,max_binlog_cache_size
二. 其他小TIPS
- 针对Innodb表,尽量不执行
SELECT COUNT(*)
语句,因为Innodb表没有类似MyISAM那样的内部计数器来记录表记录总量,执行这个操作将会全表扫描,速度很慢. - 尽量使用MyISAM表,除非必须使用其他类型,因为MyISAM类型的总体读写效率是相当高的,缺点是表级锁,而不是行/页级锁.
- 善用 <coce></coce>EXPLAIN来帮助你分析查询优化情况
- 如果需要对一个较大的且并发读写较多的数据表做
GROUP BY
等统计操作,建议使用摘要表来存储统计信息,定期更新统计表,这可能获得很大的性能改善. - 查询时如果有
ORDER BY
分句的话,注意让它的字段顺序和索引字段顺序对应,这样能加快排序速度 - 如果有一个多字段索引,则查询时,必须按照索引顺序来使用,否则该索引不会用到.例如:
索引`idx_`(col1, col2, col3)
,那么查询SELECT .... FROM ... WHERE col1=1 AND col2=2;
使用索引,而查询... WHERE col2=2 AND col3=3;
或... WHERE col1=1 AND col3=3;
则不使用索引. WHERE
中的条件如果有恒量类型的(如 `field` = 1
),就尽量放在前面,这样能更快的执行过滤.- 2 个表连接时,连接字段的类型最好一致(包括字段长度),这样的话索引速度快多了.
- 大部分情况下,字符类型的字段索引值需要一部分,例如
CREATE INDEX char_idx ON tbl1 ( name(10) );
- 尽量使用最合适的数据类型,能使用
ENUM
就不使用TINYINT
,能使用SMALLINT
就不使用MEDIUMINT
.这样能节省存储空间,增加数据存储量,提高搜索速度.不要担心这样会对省级产生很大的影响,因为加入从TINYINT
类型改变为INT
的话,并不会改变原来的数据. - 如果知道某个表总是频繁使用的话,可以把它放到
hot_cache
中,用以下方法:
SET GLOBAL hot_cache.key_buffer_size=128*1024; CACHE INDEX `xxx` IN hot_cache;
- 把拖沓复杂,速度慢的的查询分解成多个简洁明了的查询,这样尽管查询次数多了,但是总体速度和效率却可能反而更高了,而且也减少了锁表的可能.
- 执行查询时,尽量不使用外部函数,因为这样的话就无法使用可能存在的索引,并且无论如何都会极大地降低效率.如:
... WHERE `create_time` > UNIX_TIMESTAMP(NOW());
这样的查询.可以在程序中把当前的时间取得,然后直接执行构造好了的SQL语句. - 在索引字段上使用 LIKE 查询时,左边不要使用 '%' 修饰符,这样就可以利用索引,否则无法使用索引.如
... `name` LIKE 'yejr%';
. - 如果有可能,多使用存储过程,这大概能获得 22% 的性能提高.
- 如果并发访问量相对最大连接数小多了的话,最好使用永久连接,这样能节省不少连接时的系统资源损耗.
- 定期的在MyISAM表上执行
OPTIMIZE TABLE
,这能整理随便,提高索引效率. - 如果你主要按 col1,col2,...顺序检索记录,请在对表大量更改后执行
ALTER TABLE ... ORDER BY col1, col2, ...
语句,这可以获得更好的性能. - 对于频繁更改的MyISAM表,应尽量避免更新所有变长字段(VARCHAR、BLOB和TEXT).
- 对于记录总数超过500万的单表,就应该赶紧考虑分表了.分表策略有多种,比如按ID号段,或者按时间切分,等等.
- 创建数据表时尽量指定字段不能为NULL,并且有默认值.
- 使用
LOAD DATA
,而不是使用大批量的INSERT
语句来导入数据. - 使数据表名和字段名尽可能的短,例如在
user
表中使用字段名name
,而不是user_name
. - 用
DELAY_KEY_WRITE = 1
选项让MyISAM更快地更新索引,因为在表关闭之前它们不刷新到硬盘上.缺点是如果服务器如果突然被杀掉了,重启之后就必须运行myisamchk
修复索引才行. - 采用复制机制来分摊读数据的负载,把写数据只放在主服务器上,把读平均分摊到各个从服务器上,能大大提高系统负载.
发表评论
-
MySQL配置文件my.cnf 例子最详细翻译
2009-07-20 11:58 1713http://www.blogjava.net/hunte ... -
MySQL :: @@Rowcount in MySQL
2009-03-02 15:39 2148@@Rowcount in MySQL? Posted ... -
MYSQL中删除重复记录的方法
2009-02-26 12:23 0MYSQL中删除重复记录的方法 2008 ... -
使用 MYSQLBINLOG 来恢复数据。
2009-02-26 12:21 0使用 MYSQLBINLOG 来恢复数据。 20 ... -
13.2.3. InnoDB Startup Options and System Variable
2009-02-20 13:37 1237http://dev.my ... -
mysql innodb 配置详解
2009-02-20 11:01 3541加为好友发送私信在线聊天 -
20.3.9 关于死锁 深入浅出MySQL——数据库开发、优化与管理维护
2009-02-20 10:50 3124深入浅出MySQL——数据库开发、优化与管理维护 回 ... -
mysql的临时表不支持自连接
2009-02-18 13:32 2314TEMPORARY TABLE ProblemsThe fol ... -
windows 下安装两个MySQL收藏
2009-02-03 16:28 2353由于两个MySQL进程需要不同的配置文件,以下所有操作均是在W ... -
1.4.1. What's New in MySQL 5.1
2009-02-03 16:25 11431.4.1. What's New in My ... -
查看mysql版本的四种方法
2009-02-02 10:57 9361:在终端下:mysql -V。 以下 ... -
Server SQL Modes
2009-02-01 11:06 13935.1.7. Server SQL Modes ... -
MySQL中的各种JOIN(CROSS JOIN, INNER JOIN, LEFT [OUTER]
2009-01-13 14:50 6179MySQL中的各种JOIN(CROSS JOIN, I ... -
[转]SQL Server 2000执行计划成本(5/5)
2009-01-09 15:26 1164[转]SQL Server 2000执行计划成本(5/5) ... -
SQL Server 2000执行计划成本(4/5)
2009-01-09 15:25 1074[转]SQL Server 2000执行计划成本(4/5) ... -
[转]SQL Server 2000执行计划成本(3/5)
2009-01-09 15:23 1498[转]SQL Server 2000执行计划成本(3/5) ... -
SQL Server 2000执行计划成本(1/5)
2009-01-09 14:52 1612[转]SQL Server 2000执行计划成本(1/5) ... -
浅谈MySQL数据库优化
2009-01-09 14:46 1301浅谈MySQL数据库优化 [收藏此页] [打印] ... -
sql server支持create table as ...建表么
2009-01-09 11:52 8973sql server支持create table as .. ... -
SQL Server如何识别自动创建的索引
2009-01-08 15:57 1269SQL Server如何识别自动创建的索引 http://w ...
相关推荐
mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化mysql 性能优化...
mysql性能优化教程.pdf,方面阅读
mysql 性能优化与架构设计的word完整版,不可多得得关于 mysql 性能优化以及架构设计方面的资料。
mysql性能优化
Mysql性能优化教程 优化mysql性能,高并发
mysql 性能 优化 pdf MySQL 介绍和优化分享
caoz的mysql性能优化教程 caoz的mysql性能优化教程 caoz的mysql性能优化教程 caoz的mysql性能优化教程 caoz的mysql性能优化教程
MySQL性能优化和高可用架构实践.pptx
MySQL性能优化中文手册 包括sql语句,存储过程,函数的调试,调优
MySQL 性能优化 Explain ,MySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 ExplainMySQL 性能优化 Explain
MySQL性能优化 SQL优化方法技巧
千金良方:MySQL性能优化金字塔法则.docx
Mysql性能优化教程
Mysql性能优化Mysql性能优化Mysql性能优化
mysql性能优化的总结,从各个方面对sql的优化进行了总结,感觉是很好的性能优化的摘要总结,所以上传共享出来,绝对的硬货。绿色版,解压直接用,方便程序猿
mysql性能优化与诊断,详解优化经验与如何诊断瓶颈在哪
Mysql 性能优化之架构优化
MySQL性能优化的最佳20条经验,还不错,可以下载来看看。
十三MySQL性能优化详解.pdf