从事PHP也有3年的时间了,期间接触了Mysql,大学时候学的是SQL SERVER,相对而言,虽然少了SQL SERVER 的那种视图界面操做,可是我更喜欢cmd命令行这种黑屏操做,mysql以开源免费轻量著称,操做方便,用起来更是得心顺手,好了,废话很少说了,咱们来聊聊Mysql的优化吧。mysql
提及MySQL优化,不少人会首先想到查询优化,我不否定这种想法,可是我想纠正下这种观点,首先MySQL优化指的不只仅是查询优化,好比MySQL的引擎选择,分库分表,以及索引多少的选择和使用,还有更新等都是优化的一部分,我曾经听一位MySQL的讲师说过一句话:“不去优化就是最大的优化”,当时第一次听这句话的时候很有点武侠“无招胜有招”的感受,后来我慢慢理解了,这句话是告诉咱们,你不去使用数据库取数据就不用再去作什么优化了,那么不去数据库,去哪取数据呢,这就须要用到诸如Memcached,redis,Solr 等缓存库了。redis
提及索引优化,并非索引越多越好,相反,索引越多就会有弊端,你们都知道,加索引就至关因而书签,能提高MySQL的读入速度,可是不少人殊不知道,你加了索引在5个以上对于千万级数据量来讲是以牺牲写入速度来换取的,因此,换句话说,索引只须要创建适合的,不是越多越好。sql
再来简单说说查询优化,首先查询一种说法有N种SQL写法,因此,每种写法带来的效率是不同的,好比在价格表中查询最低价,就有不少查法,1是用MySQL自带的MIN函数,2是用order by 来降序查询第一条数据,固然还有其余诸如此类的写法,咱们在查询的时候习惯性的用*来表明字段查询,可是我以为这样不是很好,在查询的时候须要什么字段会去查什么字段而不是偷懒的使用*来代替,并且你所取的数据中确定不是全部字段都用到吧。数据库
还有就是在数据类型的选择上,好比INT型,CHAR型,VARCHAR型等经常使用类型,那么咱们选择怎么选择类型呢?比较知名企业腾讯在整型的选择上用的并不是是INT而是BigInt型,由于QQ会有特殊的靓号会存储不释放,因此存储空间须要8个字节,可是对于几万条,几十万条数据的中小型企业INT型就够用了,固然咱们要防范INT溢出,要是数据超出了,就须要分库分表了,又好比在作用户管理功能的时候,存储男女,这时候建议使用ENum类型,虽然存储的是0和1,可是读出来确是男和女,比你转化的效率要高吧。再来讲说char和varchar ,这哥俩最本质的区别就是字节的满与不满,char是定多少字节就是多少字节,而varchar更灵活,会自动设置空间大小,因此在字符串选择上更优先选择VARCHAR类型。固然在查询表数据的时候若是你的数据类型是固定长度,查询速度会更快。缓存
优化不只仅是我说的这些东西,好比引擎的选择上,MyIsam在不考虑任何比较的状况下,读的速度是最快的,而INNODB支持行锁而且支持事务处理在写入较多的状况下速度会大幅度提高,又好比说在建表的时候就得想好存储结构,字段类型,必要的时候加上not null等ide
以上就是我我的的一些简单的看法,固然有不少说的不是很到位,若是有什么不对的地方,欢迎你们指正!函数