玩转mysql 之mysql优化

mysql 优化之路 1:使用索引 索引介绍:首先没有因此的表,就是一个无序的表结合,查找一条数据,将会扫描整个数据表,这种工做效率将会很慢 因为索引是通过值分类 当咱们扫描 数据编号16的时候 假设找到了三条匹配的数据行,当扫描到17的时候 发现值大于咱们指望的值 此时因此中止扫描 因而可知索引提升效率的缘由 1:得知数据匹配换行在什么位置结束 2:二进制搜索算法的使用(原理 不从索引开始位置通过扫描,直接找到数据) myisam引擎索引原理数据表的数据在数据文件里 索引值在索引文件里 一个数据表能够有多个索引 索引都是按照数值分类存放的 innodb数据库:使用的是表空间,经过这个表空间管理着数据表的数据和索引的存储 mysql中使用索引的几种方式 1:在where语句中使用把与where语句所给出的条件相匹配的数据行尽快找出来,关联操做中与其它数据表相匹配的数据行尽快找出来 2:对于使用 max(),min的函数 若是数据列带索引,那么他的值可以尽快的被匹配出来,而不用经过每行的检查找出来 缺点:索引会很快占用数据文件或者数据表空间 索引的选用 1:尽可能为用来搜索,分组,分类的数据列编制索引,不要为做为输出显示列的数据列使用索引换句话说(where,orderBy,groupBy,关联子句中使用),不要selectfrom//中的 显示的中的数据列 最好不要使用索引 2:综合考虑数据列的纬度势:数据列的纬度等于他所容纳的非重覆值的个数 例 1,2,34,5,2,的纬度是4 数据列的纬度越高,索引的使用效果越好 3:短小的值进行索引 4:为字符串值的前缀编索引//将数据列的前N个字符编制索引 5:充分利用最左边的前缀//意指复合索引 (这种索引搜索组合) STATE,CITY,ZIP STATE ZIP STATE 6:不要创建过多的索引,这样会使磁盘空间急剧上升 innbdb老是使用B树索引,myisam也是使用b树索引,遇到空间数据类型会使用R树索引mysql

7:利用慢查询日志,找出性能低劣的查询 能够利用mysqldump工具去查看
8:使用explain语句查看sql语句的执行性能---explain select * from student where isSex=false 9:不要在like的开始位置使用通配符 例select * from student where name like '%张三%' 虽然这个语句是正确的 可是这样不会使用前缀索引查询,而是去扫描了整个数据表, 正确写法 select * from student where name like '%张三 此时上面你的语法等于 where name>='张三' and name<'张三ss'//此时使用了索引优化程序 10:利用优化器的长处,mysql支持链接查询和子查询 ,尽可能使用链接查询 11:避免过多使用mysql的自动转型功能 例 select age from student where age=4 select age from student where age='4' 虽然会自动转型 可是会影响速度 12:按期进行碎片整理 13:把数据压缩到text和blob数据表里 14:尽可能避免对很大的数据进行检索,如text和blob数据 15:批量加载,批量刷新,减小键的缓存刷新次数,加载完成以后 才进行刷新,单行加载,每次加载完都要刷新(由于对索引的修改 实在键缓存区进行的,而后才会适当的从机器写到硬盘)算法

相关文章
相关标签/搜索