关于mysql优化之个人见解

从事PHP也有3年的时间了,期间接触了Mysql,大学时候学的是SQL SERVER,相对而言,虽然少了SQL SERVER 的那种视图界面操作,但是我更喜欢cmd命令行这种黑屏操作,mysql以开源免费轻量著称,操作方便,用起来更是得心顺手,好了,废话不多说了,我们来聊聊Mysql的优化吧。

说起MySQL优化,很多人会首先想到查询优化,我不否认这种想法,但是我想纠正下这种观点,首先MySQL优化指的不仅仅是查询优化,比如MySQL的引擎选择,分库分表,以及索引多少的选择和使用,还有更新等都是优化的一部分,我曾经听一位MySQL的讲师说过一句话:“不去优化就是最大的优化”,当时第一次听这句话的时候颇有点武侠“无招胜有招”的感觉,后来我慢慢理解了,这句话是告诉我们,你不去使用数据库取数据就不用再去做什么优化了,那么不去数据库,去哪取数据呢,这就需要用到诸如Memcached,redis,Solr 等缓存库了。

说起索引优化,并不是索引越多越好,相反,索引越多就会有弊端,大家都知道,加索引就相当于是书签,能提升MySQL的读入速度,但是很多人却不知道,你加了索引在5个以上对于千万级数据量来说是以牺牲写入速度来换取的,所以,换句话说,索引只需要建立适合的,不是越多越好。

再来简单说说查询优化,首先查询一种说法有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等

以上就是我个人的一些简单的见解,当然有很多说的不是很到位,如果有什么不对的地方,欢迎大家指正!

时间: 2024-11-05 18:50:43

关于mysql优化之个人见解的相关文章

Mysql优化(转)

Mysql优化主要通过执行计划,索引,sql语句,调整mysql内部配置 (http://blog.chinaunix.net/uid-11640640-id-3426908.html) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connections 2)      back_log 3)      interactive_timeout 4)  

MySQL优化—工欲善其事,必先利其器之EXPLAIN

转自:http://www.cnblogs.com/magialmoon/archive/2013/11/23/3439042.html mysql官方手册关于explain命名的说明文档:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html#explain_select_type 最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器.最近我就打算了解下几个优化MySQL中经常用到的工具.今天就简单介绍下

MySQL优化概述

MySQL优化概述 设计: 存储引擎,字段类型,范式 功能: 索引,缓存,分区. 架构: 主从复制,读写分离,负载均衡. 合理SQL: 测试,经验. 存储引擎 Create table tableName () engine=myisam|innodb; 一种用来存储MySQL中对象(记录和索引)的一种特定的结构(文件结构) 存储引擎,处于MySQL服务器的最底层,直接存储数据.导致上层的操作,依赖于存储引擎的选择. Tip:存储引擎就是特定的数据存储格式(方案) Show engines 查看

小菜鸟mysql优化解决方案

根据小菜鸟的个人习惯,自己的编写的一套MYSQL优化方案,感觉还是有点儿菜,望大家谅解,不足之处,请大神们互动! #mysql优化解决方案 #公共参数默认值: max_connections = 151 #同事处理多大连接数,推荐设置最大连接数是上限连接数的80%左右 sort_buffer_size = 2M #查询排序时缓冲区大小,只对order by和group by起作用,可增大此值为16M open_files_limit = 1024 #打开文件数限制,如果show global s

centos mysql 优化 第二十三节课

centos mysql  优化  第二十三节课 f

centos mysql 优化 第二十一节课

centos mysql  优化  第二十一节课 f

centos mysql 优化 第十九节课

centos mysql  优化  第十九节课 f

centos mysql 优化 第十八节课

centos mysql  优化  第十八节课 f

centos mysql 优化 第十二节课

centos mysql  优化  第十二节课 f