Submitted by yejr on 周二, 2008/10/07 - 16:01
Submitted by yejr on 周六, 2008/09/27 - 19:32
注:本系列文章主要探讨 MySQL 内存利用以及执行计划相关的一些知识点,从而为 MySQL 优化打下更好的基础。
环境说明
OS: AS4U6, 2.6.9-67.0.15.ELsmp, 16G Ram, MD3000阵列, xfs文件系统
MySQL 5.1.26 - percona(innodb plugin, innodb stat, user stat, msl, show patch, acc-pslist 补丁)
Submitted by yejr on 周三, 2008/08/20 - 11:31
Submitted by yejr on 周四, 2008/07/17 - 12:18
引言:在以前,我总是习惯用 INT UNSIGNED 来存储一个转换成Unix时间戳的时间值,认为这样做从索引,比较等角度来讲,都会比较高效。现在我们来对比下 TIMESTAMP 和 INT UNSIGNED 以及 DATETIME 这3种类型到底谁更好。
1. 准备
创建一个测试表:
mysql> CREATE TABLE `t` (
`d1` int(10) unsigned NOT NULL default '0',
`d2` timestamp NOT NULL default CURRENT_TIMESTAMP,
`d3` datetime NOT NULL,
KEY `d2` (`d2`),
KEY `d1` (`d1`),
KEY `d3` (`d3`)
);
然后创建一个存储过程填充数据:
Submitted by yejr on 周二, 2008/06/24 - 17:17
起因:在innodb表上做count(*)统计实在是太慢了,因此想办法看能不能再快点。
现象:先来看几个测试案例,如下
一、 sbtest 表上的测试
show create table sbtest\G
*************************** 1. row ***************************
Table: sbtest
Create Table: CREATE TABLE `sbtest` (
`aid` bigint(20) unsigned NOT NULL auto_increment,
`id` int(10) unsigned NOT NULL default '0',
`k` int(10) unsigned NOT NULL default '0',
`c` char(120) NOT NULL default '',
`pad` char(60) NOT NULL default '',
PRIMARY KEY (`aid`),
KEY `k` (`k`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1
Submitted by yejr on 周六, 2007/12/08 - 21:26
应CU老大邀请,今天下午在北京交通大学和网友们一起再次温习了这个主题,由于最近时间比较紧迫,只好采用前不久的一次技术交流文档了,大家多海涵 :)
文档见附件,必须要用本站帐号登录才能下载,呵呵。
Submitted by yejr on 周一, 2007/10/15 - 20:43
硬件: Intel(R) Xeon(R) CPU 5130 @ 2.00GHz * 2, 4G RAM, 564G SAS
软件: Red Hat Enterprise Linux AS release 4 (Nahant Update 4) 2.6.9 42.ELsmp (32-bit), MySQL 5.0.27-standard-log
总记录数: 1016126, 每行平均大小 46822
1. 导出测试
1.1 导出成文本
方法: SELECT * INTO OUTFILE '/backup/yejr.txt' FROM yejr;
耗时: 3252.15 秒
1.2 导出成 .sql 文件
方法: mysqldump -t -n --default-character-set=latin1 test yejr > /backup/yejr.sql
耗时: 2124 sec
结论: 用 mysqludmp 导出数据是相对较快的方法.
2. 导入测试
2.1 导入 txt 文件
方法: mysql test < /backup/yejr.txt
耗时: 3317.62 sec
Submitted by yejr on 周一, 2007/09/03 - 17:02
原文出自: http://www.pczone.com.tw/vbb3/archive/t-121574.html
今天看到的文章 , 改天打算再來 Compile 一次
原文來自:
http://www.hshh.org/index.php?id=26
------------------------------------------------------------------
根據 FreeBSD maillist、google 獲知 libthr 這樣1:1 的線程庫比較適合 MySQL 運行。
編譯參數:
預設啟用archive類型儲存格式,啟用支持大表,啟用OpenSSL支持,預設使用thr線程庫
./configure --prefix=/usr/local/mysql --without-debug --without-bench --enable-thread-safe-client --enable-assembler --with-extra-charsets=complex --with-named-thread-libs='-lthr' --with-archive-storage-engine --with-big-tables --with-openssl
# gmake all install-strip
性能調整:
Submitted by yejr on 周日, 2007/08/19 - 17:09
看看正序取得结果的耗时:
mysql>SELECT a.HandicapID, FROM_UNIXTIME( a.AddTime, '%y-%c-%e %H:%i' ) AS ShowAddTime, a.MatchID, a.MakerID, a.HandicapNumber ...
FROM MatchHandicap AS a
LEFT JOIN MatchInfo AS b ON ( a.MatchID = e.MatchID )
LEFT JOIN Team AS c ON ( e.HomeID = c.TeamID )
LEFT JOIN Team AS d ON ( e.AwayID = d.TeamID )
LEFT JOIN BookMaker AS e ON ( a.MakerID = e.MakerID ) ORDER BY a.HandicapID LIMIT 11910298, 20;
........
........
20 rows in set (1330 sec)
很恐怖吧,暂且不论这个SQL语句其他可以再优化的地方,把它改造成用倒序取得结果的方式试试看:
Submitted by yejr on 周四, 2007/08/16 - 20:51
有一个表 tbl1 的结构如下:
CREATE TABLE `tbl1` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` char(20) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
该表里已经存在了200万条记录.
现在, 需要把 tbl1 中的所有记录全部导到另一个完全相同的表 tbl2 中去.
1. 如果采用以下传统的方式, 则执行时间为: 98.01s
mysql>INSERT INTO tbl2 SELECT * FROM tbl1;
Query OK, 2000000 row affected (1 min 38.01 sec)
Records: 2000000 Duplicates: 0 Warnings: 0
页面
最近评论