您的位置:首页 > 数据库 > MySQL

MySQL-SQL优化

2017-03-01 15:23 155 查看
有篇说关系数据库的文章,今天想补充下SQL优化的东西,重点讲讲怎么做SQL优化,当然是偏重开发这块,至于表设计、主从复制、服务器硬件等话题 没有。
首先你要写一条sql,你首先得收集表信息,sqlYog蛮好用,表字段,索引等信息;
然后写一个初版的sql,开始explain,key走了啥索引,rows扫了多少行,extra里有木有内存排序,当然select_type你要是all,那就来事了;
最后就是走有效的索引了,选择、排序、连接等,都得依靠索引,当然你可以把索引交给搜索引擎,先不讨论这块;这地方有个命令,show index for可以查看索引的选择率,这个决定了索引的有效性,mysql默认30%以上走索引,当然多个条件还得联合索引。
当然有好多variable表明你sql的效率,比如Handler_read_next、Handler_read_rnd_next、Sort_rows等,具体请Google,还是那句话,走有效的索引。

上面的讨论基于你不自己处理索引的前提,当然你自己建索引,就得考虑对频繁查询做索引,索引的有效性,包括选择率及联合索引,而且更新频繁的字段也不适合做索引;
对于mysql数据库,现在大部分都是InnoDB引擎,它本身是IOT表,更重要的是,他的行锁是基于索引的,如果没有走索引,那么就会加表级意向锁,这种情况对数据库的并发承载肯定不好,还是那句话,走有效的索引。

来张InnoDB的索引原理图:



最后补充一句,业务复杂点的sql,一般会使用联合索引,而且索引不能跨表,当然表链接还是得索引哈,所以你可能需要把复杂sql拆开,mysql的查询优化器比不了oracle的说。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql sql innodb