数据库优化 2018-01-09

    这边呢,我自己本身用的也不多,毕竟我们项目还小。上一个项目就经常使用,用的还挺多的。主要是人懒,不过最好要养成习惯。


    首先呢,我们可以开启服务器慢日志(慢查询),这个如果不懂可以百度设置,这个可以找到哪些sql语句慢。

    还有呢,我们索引的使用,什么样的数据使用唯一索引(Unique) 例如订单号,例如用户身份证号,这种基本可以设置为唯一索引,搜索速度最快,其余的经常放进where条件里面搜索的使用where索引。


    组合索引,如果我们有个订单表,该表存着用户的资金流入流出数据,例如我们使用action_type来判断是转入或是转出,那么如果我们要查询某个用户的转入是多少钱应该怎么设置索引呢?小伙伴猜到了,uid和action_type设置成索引。对了,先后顺序还是有点要求的,具体我们可以explain试试看呢?


    对了,数据库字段过多也是很蛋疼的事,以订单表吧,我刚入职上家公司的时候,整个订单表字段将近60个,数据库数据才百来万条,就卡得不要不要的。设置某字段为索引都会出现锁表现象。核心数据一张表,不常用的应该拆分到别的表去,当扩展表,例如我们user表放用户账户,密码等登录需要的信息提供用户登录时使用,这样是不是查询的东西少了,比较快了。当我们想要用户昵称的时候我们去用户的扩展表找,当我们需要用户的绑卡信息的时候我们去用户绑卡信息表找。如果这三张表不拆分,而是放在同一张表,那是多么恐怖,又是好几十个字段,哪天数据量大了,并发还没来就躺了。


    善于使用explain 我们在写代码的时候常考虑,使用sql语句是否能实现呢?OK,如果能实现我们把sql语句拿出来,在工具里执行看看,前面加上explain 就能看到各种数据  至于这些数据什么东西的怎么样才是最好的 请看这篇 http://blog.csdn.net/zhuxineli/article/details/14455029


    哦对了,很多人会在for循环或者foreach循环里面使用查询,这种如果是不懂还好,学一下,如果知道还这么查询那就有点坑了,占用数据库io


    比如我们循环10条,那么是不是就有查询10次数据库,那么如果我们采用in来 把10个要查询的条件in进去这样是不是一次就查出10条,然后再稍加处理一下PHP的处理速度是比mysql快的,这样是不是只有一次查询?当然结果可能是速度一样快,但是少占用查询io可以多出点空位给别的客户使用,何乐不为?


    explain是mysql神器,大家多多使用就懂得了。

    另外网站优化可不止数据库,还有好多呢。对了,问大家一个问题 innodb和myisam有什么却别? 实在不愿意敲,还是直接扔文档给大伙看吧:http://blog.csdn.net/xifeijian/article/details/20316775