玩转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树索引

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:批量加载,批量刷新,减少键的缓存刷新次数,加载完成之后 才进行刷新,单行加载,每次加载完都要刷新(因为对索引的修改
实在键缓存区进行的,然后才会适当的从机器写到硬盘)

你可能感兴趣的:(玩转mysql 之mysql优化)