mysql优化时一个综合性的技术,主要包括
定位慢查询 show status like ‘slow_queries‘;
把慢查询的sql记录到我们的一个日志中
bin\mysqld.exe - -safe-mode - -slow-query-log
[mysql5.5 可以在my.ini指定]
bin\mysqld.exe –log-slow-queries=d:/abc.log
[低版本mysql5.0可以在my.ini指定]
create table aaa (id int unsigned primary key auto_increment );
alter table 表名 add primary key (列名);
create index 索引名 on 表 (列1,列名2);
CREATE TABLE articles (id INT , title VARCHAR(200), body TEXT,
FULLTEXT(title,body))engine=myisam charset utf8;
select * from articles where match(title,body) against(‘database’);
create table ddd(id int primary key auto_increment , name varchar(32) unique);
create unique index 索引名 on 表名 (列表..);
show index(es) from 表名
show keys from 表名
alter table 表名 drop index 索引名;
alter table 表名 drop primary key
explain select * from dept where loc='aaa'
就不会使用到索引show status like ‘Handler_read%’;
handler_read_key
这个值越高越好,越高表示使用索引查询到的次数。
handler_read_rnd_next
这个值越高,说明查询低效。
select * from dept, emp where dept.deptno=emp.deptno;
[简单处理方式]
select * from dept left join emp on dept.deptno=emp.deptno;
[左外连接,更ok!]
在开发中,我们经常使用的存储引擎 myisam / innodb/ memory
myisam 存储: 如果表对事务要求不高,同时是以查询和添加为主的,
我们考虑使用myisam存储引擎. ,比如 bbs 中的 发帖表,回复表.
INNODB 存储: 对事务要求高,保存的数据都是重要数据,
我们建议使用INNODB,比如订单表,账号表.
Memory 存储,比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,
我们考虑使用memory, 速度极快.
optimize table tablexxxx;
cmd控制台:
比如: 把temp数据库备份到 d:\temp.bak
mysqldump –u root –proot temp > d:\temp.bak
如果你希望备份是,数据库的某几张表
mysqldump –u root –prot temp dept > d:\temp.dept.bak
mysql控制台 source d:\temp.dept.bak
分表技术有(水平分割和垂直分割)
当一张越来越大时候,即使添加索引还慢的话,我们可以使用分表
以qq用户表来具体的说明一下分表的操作.
首先我创建三张表 user0 / user1 /user2 , 然后我再创建 uuid表,
该表的作用就是提供自增的id,
思考: 如果我们做的是一个平安保险公司的一个订单(8999999999000000条)查询功能
,如何处理海量表?->按时间.
分表的标准是依赖业务逻辑(时间/地区/….)
安装字符不同. a-z
我们给用户提供的查询界面一定是有条件,不能让用户进行大范围.(世界),
如果需要的可以根据不同的规则,对应多套分表.
检索时候,带分页条件,减少返回的数据.
项目中,灵活的根据需求来考虑.
一句话: 如果一张表某个字段,信息量大,但是我们很少查询,
则可以考虑把这些字段,单独的放入到一张表中,这种方式称为垂直分割.
配置my.ini文件或者my.conf启用二进制备份
log-bin=d:/binlog/mylog
启动mysql得到文件
d:/binlog/mylog/mylog.index 索引文件,有哪些增量备份文件
d:/binlog/mylog/mylog.00001 存放用户对数据库操作的文件
备份指令
mysqlbinlog --stop-datatime="2013-" d:d:/binlog/mylog/mylog.00001| <br />mysql -uroot -p
mysqlbinlog --start-datatime="2013-" d:d:/binlog/mylog/mylog.00001| <br />mysql -uroot -p
mysqlbinlog --start-position="12345" d:d:/binlog/mylog/mylog.00001| <br />mysql -uroot -p
mysqlbinlog --stop-position="22345" d:d:/binlog/mylog/mylog.00001| <br />mysql -uroot -p
mysqlbinlog --start-position="12345" --stop-position="22345" d:d:/binlog/mylog/mylog.00001| mysql -uroot -p
可以使用mysql/bin/mysqlbinlog 来查看备份文件内容 cmd>mysqlbinlog d:/binlog/mylog/mylog.00001
每周做个全备份(mysqldump) 启用增量备份(把过期时间设为大于等于7)