Mysql 分区相关资源
http://www.bigheaddba.net/article/y2009/339_mysql%E5%88%86%E5%8C%BA%E8%A1%A8%E5%B1%80%E9%99%90%E6%80%A7%E6%80%BB%E7%BB%93.html
http://www.ooso.net/archives/217
http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html#partitioning-range
http://hi.baidu.com/zhangguanshi/blog/item/9ff5a1eb303927dbd439c925.html
http://www.cppblog.com/woaidongmao/archive/2009/06/09/87174.aspx
......
昨天遇到一个问题:
在一张有三十万条纪录的数据表A,其主键自增字段id,name字段(varchar),还有type_id(int),在name字段上已经添加了索引。type_id由于是整型字段,认为加索引没有太多的意义,所以没有加索引。
本次有一个需求是在一个循环中按type_id查询此表A,结果一执行此循环,mySQL立刻占用CPU到200%以上,导致服务器响应极慢。
开始没想到是查询速度的问题,后来发现换一个表,CPU占用率立刻下降。于是分析了查询过询,发现每次查询都要遍历整表,所以数据库压力非常大。手工直接使用sql在数据库查询:
select * from A where type_id = xxxx
执行时间约为0.42s(400ms左右),速度较慢。
于是在type_id上添加索引,然后再执行同条语句。
执行时间为0.01s(10ms左右),速度明显提升(40倍左右)。
再执行循环,发现CPU占用8%左右,比较理想。
性能提升的原因分析:
type_id的值有特殊性:大部分type_id的值为0,索引效果明显。正好本次查询不需要查询type_id为0的纪录。如果要查询type_id为0的纪录,则效果提升可能不明显。
体会:
(1)在遇到查询性能的时候,适当的分析数据,添加索引,可能能大幅提高性能。
(2)是否添加索引,需要考量数据总量 ......
MySQL安装指南
要安装 MySQL,可以在终端提示符后运行下列命令:
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install php5-mysql
// 安装php5-mysql 是将php和mysql连接起来
一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:
sudo netstat -tap | grep mysql
当您运行该命令时,您可以看到类似下面的行:
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
如果服务器不能正常运行,您可以通过下列命令启动它:
sudo /etc/init.d/mysql restart
进入mysql
mysql -uroot -p
(输入mysql的root密码)
配置 MySQL 的管理员密码:
sudo mysqladmin -u root password newpassword
......
MySQL count(*) 与 count(col) 查询效率比较
优化总结:
1.任何情况下SELECT COUNT(*) from xxx 是最优选择;
2.尽量减少SELECT
COUNT(*) from xxx WHERE COL = ‘xxx’ 这种查询;
3.杜绝SELECT COUNT(COL) from tablename WHERE COL = ‘xxx’
的出现。(其中COL非主键)
环境:
MySQL版本:5.0.45
OS:Windows XP SP3
数
据表一:sphinx
+———-+——————+——+—–+———+—————-+
| Field |
Type | Null | Key | Default | Extra |
+———-+——————+——+—–+———+—————-+
|
id | int(10) unsigned | NO | PRI | NULL | auto_increment |
|
til&nbs ......
最近遇到这么一个问题:要求删除表中重复的记录。具体来说:比如有一张用户表,用户姓名不是主键可以重复,存在这种情况,一个用户姓名被录入了好几次,如何删除重复的记录,同时要保留一条该用户录。没有具体说明保留那条记录,只要用户姓名重复的保留一条即可。
示例:
animal 表:
create table animal (
id int ,
name varchar2(100),
sex varchar2(10)
);
添加记录:
insert into animal values (1, 'tom', 'male');
insert into animal values (2, 'tom', 'female');
insert into animal values (3, 'tom', 'ff');
insert into animal values (4, 'lili', 'male');
id为1,2,3的三条记录名字重了,要求只保留一条,删除另外两条。
oralce数据库中,该问题解决方法的具体实现如下:
delete from animal a where rowid<(select max(b.rowid) from animal b where a.name=b.name);
结果:
剩下两条记录。一条name=lili,一条name=tom.
-----------------------------------------------------------------------------
mysql数据库中,该问题解决方法的具体实现:
alter ignore table animal add unique index (name);
结果同上面。
总结:
类似 ......
一、mysql安装配置
root@xmlinuxer-server:/media/WinF/LAMP#groupadd mysql
root@xmlinuxer-server:/media/WinF/LAMP#useradd -g mysql mysql
root@xmlinuxer-server:/media/WinF/LAMP#tar -zxvf mysql-5.0.33.tar.gz
root@xmlinuxer-server:/media/WinF/LAMP#cd mysql-5.0.33
root@xmlinuxer-server:/media/WinF/LAMP/mysql-5.0.33#./configure --prefix=/opt/app/mysql5 --without-debug --without-bench --with-charset=utf8 --with-extra-charsets=all --with-plugins=fthightman --enable-thread-safe-client
如果出现了以下错误:
checking for tgetent in -ltermcap... no
checking for termcap functions library… configure: error: No curses/termcap library found
说明 curses/termcap 库没有安装
apt-cache search curses | grep lib
安装 libncurses5-dev ,然后重新运行配置
apt-get install libncurses5-dev
或者方法二
去下载一个ncurses-5.6.tar.gz,
wget http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.6.tar.gz
tar zxvf ncurses-5.6.tar.gz
cd ncurses-5.6
./configure –prefix=/usr –with-shared –withou ......