索引类型:主键索引,唯一索引,联合索引,普通索引,全文索引
建立索引: 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脚本。
-