mysql优化---笔记
一、优化方法:(加粗部分为比较重要的)
1、数据表设计合理;2、索引优化;3、SQL语句优化,定位慢查询explain ;4、分表技术、分区技术;5、读写分离(配置);6、创建适当的存储过程、函数、触发器’7、my.ini配置优化;8、软硬件升级;
1、表的设计满足3nf(范式)
a、1nf 指表的列具有原子性,不可再分。关系型数据库天然满足1nf
b、2nf表中不能有完全重复的记录。一般通过自增主键实现
c、3nf 列的内容可以推导出的,那就不要单独一列存放。也就是说,比如一个学生肯定会有班级、系等信息,所以可以另外新建class表,两表关联
2、索引(B-tree)优化、定位慢查询explain
创建海量表,例如800万条完全不同的数据,这时,我们需要使用存储过程完成。
为了防止创建存储过程冲突,定义一个新的命令结束符,如下:
在mysql里面创建一个函数(用于随机返回指定的个数字符串),这个函数可以直接被使用,也可以被php所使用 select rand_string(10) from 表
用随机函数,生产海量数据,构建大表
大表构建完成以后
海量表带来的问题,速度太慢
a、先使用索引尝试解决
但是要考虑到,索引是有开销的,如果占了大量内存,例如1G,最好还是考虑分表的好。
b、定位慢查询explain
怎么分析慢语句---使用explain
5、优化
如何选择存储引擎:
现在越来越多使用innoDB (并发性好)
读、插入操作为主,少量更新、删除操作,并且对事务的完整性要求不高,选择MyISM,其优点是速度快(尤其适合论坛帖子、新闻、商品列表)
InnoDB 提供事务安全,写的操作会比较差一点,占用更多的磁盘空间,(尤其适合对安全性要求比较高的,积分、余额、账户)
Memory(访问频繁,变化频繁,不需要入库的数据,例如用户登录状态)
选择合适的数据类型: