mysql 优化

给你一台服务器让你去优化,第一,先要去观察问题,只有观察到了问题,才能知道如何去优化。

先做基准测试,看看我们的服务器潜力到底有多大。

1.打开Mysql服务

2.查看我们Mysql的版本和安装了哪些相关的东西

3.登录Mysql

 

4.执行show status;

5.返回200多行数据,着重关注这3行

当前已经发生了多少次查询

有几个线程过来连接了(有多少个连接)

有几个进程正在工作(连接中有多少个是活动的)

AWK:按行读取文件,把当前行赋给变量$0,把当前行的第一列赋给$1,第二行赋给$2,以此类推。

下面这几条命令执行的就是

    1. 把score.txt中的内容原样打印出来。
    2. 把每一行的第一列的值打印出来
    3. 把每一行的第二列的值打印出来

      AWK还可以使用正则匹配。如下这条命令,就是把l开头的行,打印出来。


      show status;命令,也可以用mysqladmin  -uroot ext替换。

      所以如下这条命令就是,把mysqladmin –uroot ext命令的结果,传给awk,然后把Queries开头的行的第四列的值打印出来

       

如下的命令是,把Queries,Threads_Connected,Threads_running开头的行的第四列的值打印出来。

在AWK中,我们还可以设置变量,下面的名师是,把Queries,Threads_Connected,Threads_running开头的行的第四列的值分别赋给变量q,c,r,然后再通过变量,把这些值打印出来,得到的结果是一样的。

AWK的执行过程是会,把正则匹配及处理方式带入到每一行。循环过程中的每一行,先通过正则对这一行进行匹配,如果匹配成功,则用处理方式进行处理,否则,跳过。就像上述命令,就是正则先匹配Queries,Threads_Connected,Threads_running,匹配成功之后,用处理方式进行处理,处理方式就是打印,也就是printf函数

试验

1.启动memcached,给他512M内存

2.启动Nginx

3.由于我们的nginx是fastcgi的方式,所以需要把php也起来

 

 

表的优化与列类型选择

列选取原则

  1. 字段类型优先级,整型>data,time>enum>char,varchar>blob

原因:整型,time运算块,节省空间

char varchar要考虑字符集的转换与排序时的校对集,速度慢

Blob无法使用内存临时表

  1. 够用就行,不要慷慨(如smallint,varchar(N))

原因:大的字段浪费内存,影响速度

以varchar(10),varchar(300)存储的内容相同,但是在表联查时,varchar(300)需要花更多的内存

  1. 进来避免用NULL

原因:NULL不利于索引,要用特殊的字符来标注

在磁盘上占据的空间其实更大

试验

可以建立2张字段相同的表,一个允许为null,一个不允许为null,各加入1W条数据,查看索引文件的大小。可以发现null的索引要大些

 

Enum类说明

  1. enum列在内部用整型来存储

  2. enum列月enum列想关联速度最快(意思是如果一张表的字段使用了enum,那么另外一张表也尽量使用enum)
  3. enum列比char,varchar的弱势—---在碰到与char关联时,要转化,要花时间
  4. 有时在于,当char非常长时,enum依然是整型固定长度。当查询的数据量越大时,enum的有时越明显
  5. enum与char,varchar关联,因为要转化,速度要比enum->enum,char->char要慢,但有时候也这样用----就是在暑假了特别大时,可以节省IO
原文地址:https://www.cnblogs.com/mrxiaohe/p/6762831.html