Mysql 优化
- 服务器硬件
- Mysql服务器优化
- SQL语句优化
- 范式化设计优化
- 物理设计优化
- 索引优化
服务器硬件
这是最简单的一种方式,1升级硬盘一般数据库服务器的瓶颈都在IO,如果是机械硬盘的话,可以换个固态硬盘。或做磁盘阵列。2升级内存。
mysql服务器优化
这种方式是通过,合理地修改Mysql的配置去实现的。将mysql迁移到linux上。
SQL语句优化
避免关联子查询
select a.sname,(select classname from class b where b.classid=a.classid) as classname from student a;改成left join,具体就不写了。
反范式化设计优化
冗余必要字段
注意在业务表中别违反。会大大的降低系统的可维护性与数据的一致性。经常在维护一些老的项目时,吃尽了苦头。几个表中都有这个字段。我更改时,真不知道要改多少个地方。
物理设计优化
建表时选择合适的数据类型
当一个列可以选择多种数据类型时
1优先考虑数据类型
2其次是日期,时间类型
3最后是字符类型
4对于相同级别的数据类型,应该优先选择占用空间小的数据类型
索引优化
- 注意索引顺序与条件的关系,有个最佳左前缀原则。即:where的条件与索引的顺序要一致,不然,将失效。如:索引顺序为A,B,C列。where a=1 and b=2 and c=3.完美走索引。如果是where c=3 and b=2 and a=1 这样索引是不走索引的。如果是where a=1 and c=3 and b=2 那么只走了a的索引。b,c都不起作用。这就是最佳左前缀原则。
- 当条件中有范围查询的时候,索引必须要建在最后。如:where a>1 and a<7 and b=1 and c=2 索引顺序应该要是:b,c,a。
- 可以使用explain来查看查询计划。其中有一列:key_len。如果现在索引:a(varchar(10))b(varchar(10))那么key_len=103+103=60。如果查询计划出来的key_len是60则完成走了索引。如果小于60则部分索引失效。备注:类型如果是允许为空的,就要在原大小上加1。varchar 2个字节允许为空所以是3。
总结
在项目的优化中,利用好索引,可以让你们项目性能提升百倍。很多nosql的原理,也是在这个基础上建立的。利用树或哈希表这样的数据结构来存储数据,减少搜索时间。