mysql的常用优化知识

索引类型:主键索引,唯一索引,联合索引,普通索引,全文索引

建立索引: create index index_name on table(field_name);

删除索引: drop index index_name on table;

查看索引: show index from table;

建立索引:

alter table 数据库add index 索引名称(数据库字段名称)
PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE (`column`)
INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

1.  一个列上建立索引后,如果是以like查询,百分号在左边则利用不上索引。好比  select a from t where bb like '%hehe';这种情况,bb有索引也用不上。。

2.  如果利用or关键字的话,左右两边有一个字段没索引就利用不上。好比  select a from t where b=1 or c=2;这种情况,如果b或c有一个没建立索引,就用不上索引。

3.  group by 的时候默认会有个排序,排序很费性能,如果不必要的话,可以加上一句  order by null。这样好些。顺便order by 经常排序的字段加个索引也好多。

 (查看sql是否用上了索引,可以通过explain sql进行查看。)

4.  一个字段的数据类型,能满足业务要求的情况下,越小越好。。比如ENUM的使用比varchar好多。

5.  在财务系统或者金钱上,小数保存使用decimal,最好都这么用。。

6.  如果业务上自己知道要查出一条就ok的话,最好sql上加一句limit 1

MyISAM存储引擎下,索引 是 .MYI文件。。数据存在.MYD文件。。.frm是表结构文件(innodb也有这个)。

MyISAM 和 Innodb的区别  详细可以参考:http://www.oschina.net/question/17_4248

MyISAM 删除delete的时候数据库文件大小不会啥变化,需要执行optimize table才会清掉碎片。。表级锁。

Innodb 中存在表的数据会在外头有个文件ibdata1 里,不在.MYD文件里。不像是MyISAM。支持事务。支持外键。一般行级锁。

这个讲数据库文件不错,myisam和innodb的数据文件存放

http://fuwenchao.blog.51cto.com/6008712/1344854

顺便自己测试的时候,快速造数据的一个sql,利用自己表的数据翻倍增加:

#表名:table;字段id(auto_increment primary key) title
insert table (id, title) (select null,title from table);#注意没有values的关键词和null的用法

mysql的主从复制和读写分离:

这两篇文章写得不错~

http://heylinux.com/archives/1004.html

http://www.cnblogs.com/itech/archive/2011/09/22/2185365.html

读写分离mysql配置,需要主服务器(处理更新写请求),从服务器(处理读请求,并与主服务器进行数据同步),和代理服务器(处理mysql请求,根据sql分辨出哪些是读,哪些是写,然后分派给不同的mysql服务器)

mysql proxy代理服务器的配置脚本是个lua脚本。

 

-

原文地址:https://www.cnblogs.com/firstForEver/p/4943368.html