MySQL高级优化

第一部分 前端

1.查看文件的大小:ll -h
  
2.实时监控一条命令的执行结果:watch -n1 ls -lhmysql

  alt+f1---alt+f6:分别切换到linux的6个终端;linux

3.改变语句终结符:\d //sql

4.独占表才能作成数据表分区;
  修改mysql配置文件,设置为innodb独占表空间:
  innodb_file|_per_table=1;//默认是没有这一项的。数据库

 


第二部分:mysql经常使用操做后端

1.复制表结构:create table t2 like t1;服务器

2.复制表数据:insert into t2  select * from t1;
  注:这样有可能会出错,最好代表字段;只有在两个表的结构彻底同样的状况下,才会成功。socket

3.建立索引(mysql索引分为三种:普通索引、UNIQUE索引、PRIMARY KEY索引):
  ALTER TABLE table_name ADD INDEX index_name(column_list);
  ALTER TABLE table_name ADD UNIQUE(columu_list);
  ALTER TABLE table_name ADD PRIMARY KEY(column_list);
  注意:也可使用create建立所用,可是create不能用于主键索引,通用性没有alter好;tcp

4.查看索引:show index from t1;函数

5.删除索引:DROP INDEX index_name ON table_name
         或者:ALTER TABLE table_name DROP INDEX index_name
         或者:ALTER TABLE table_name DROP PRIMARY KEY

6.建立视图(视图:从原表中读取的数据造成的中间表):
  create view v_t1 as select * from t1 where id>5 and id<10;

7.显示视图帮助:? view

8.查看视图:show tables;

9.删除视图:drop view v_t1;

10.重排auto_incremnet的值:truncate table tablename 或者  alter table tablename auto_increment=1;

 


第三部分:mysql内置函数

1.字符串函数:
  CONCAT(string2 [,...]) //链接字符串
  LCASE(string)   //转换成小写
  UCASE(string)   //转换成大写
  LENGTH(string)  //string长度
  LTRIM(string)   //去掉前端空格
  RTRIM(string)   //去掉后端空格
  REPEAT(string,count)  //重复count次
  REPLACE(str,search_str,replace_str) //在str中用replace_str替换search_str
  SUBSTRING(str,position[,length]) //在str的position开始,取length个字符
  SPACE(count)  //生成count个空格

2.数学函数
  BIN(decimal_numeber)   //十进制转二进制
  CEILING(number)        //向上取整
  FLOOR(number)          //向下取整
  MAX(col)               //取最大值,聚合的时候使用
  MIN(col)               //取最小数,聚合的时候使用
  SQRT(number)           //开平方
  RAND()                 //返回0-1内的随机数

3.日期时间函数
  NOW()                  //当前日期和时间
  CURDATE()              //当前日期 
  CURTIME()              //当前时间
  UNIX _TIMESTAMP(date)   //返回当前data的unix的时间戳
  FROM_UNIXTIME()        //返回UNIX时间戳的日期值
  WEEK(date)             //返回日期date为一年中的第几周
  YEAR(date)             //返回如期date中的年份
  DATEDIFF(starttime,endtime)     //返回开始时间金和结束时间间隔的天数


第四部分:mysql预处理(待补充)
  


第五部分:事务处理(MyISAM不支持事务,InnoDB才支持)(待补充)

 

第六部分:存储(待补充)

 

第七部分:触发器(当修改了一张表的数据的时候,同时也修改了另一张的数据)(待补充)

 

第八部分:补充
1.外键:一张表中的外键是另外一张表的主键;
  注:Innodb类型的表支持外键,MyISAM类型的表不支持外键,虽然能够建立成功,可是不起做用。

2.运行状态查询

  a.只针对mysql
  show status; //所有状态
  show status like "com_select%"; //查询次数
  show status like "com_insert%"; //插入次数

  b.只针对InnoDB引擎的
  show status like "InnoDB_rows%" //查询全部的
  show status like "InnoDB_rows_read"
  show status like "InnoDB_rows_updated"
  show status like "InnoDB_rows_inserted"
  show status like "InnoDB_rows_deleted"

  c.其它
  show status like "conections";//连接mysql的数量
  show status like "Uptime";//服务器已经工做的描述
  show status like "Slow_queries";//慢查询的次数(须要在配置中先开启,
  查看慢查询相关配置:show variables like "%long%";  )
  
  经过慢查询日志来查看那些语句执行的比较慢!!!!


第九部分:索引优化
  使用语句:explain、desc
  注意点:影响的行数决定了查询的时间!
  
  1.索引的使用:
  a.对于建立了多个索引,只要查询条件用到了最左边的列(第一个索引字段),索引就会被用到;反之,        若是没有用到第一个列,索引就不会用到。
  b.使用like查询,后面若是是常量而且只有%号不在第一个字符,索引才能被用到。
  c.若是对于大的文本文件进行搜索,使用全文索引而不使用like"%...%";
  d.若是列名是索引,使用column is null将使用到索引,使用column is not null则不会使用到索引;
  e.使用or查询的时候,or前面和后面的两个字段必须都加上索引,不然索引用不上;
     and查询则只须要一个字段添加索引就会用到索引;
  f.where条件对应的字段类型不对,也会用不上索引(如:做为条件的字段是varchar类型,并添加了索          引,但查询的时候字段却使用的是int类型,此时查询的时候,mysql会放弃使用索引);

  2.在某些状况下,mysql不使用索引会比使用索引搜索更快(不多,mysql本身会判断)

  3.查看索引的使用状况
    使用命令:show status like 'Handler_read%'
    结果:
    Handler_read_key:表明了一个行被索引读的次数;若是索引正常工做,它的值会很高;
    Handler_read_rnd_next:若是他的值很高,则意味着查询运行低效,应该创建索引补救。


第十部分:表优化
    1.检查表:check table tablename;
    2.优化表:optimize table tablename;


第十一部分:数据的导入导出
    1.数据导出:d:\soft\wamp\bin\mysql\mysql5.6.17\bin>mysqldump -uroot -p test > c:/test.sql
    2.数据导入:d:\soft\wamp\bin\mysql\mysql5.6.17\bin>mysql -uroot -p test < c:/test.sql


第十二部分:MyISAM
    读锁:某我的读锁了一张表,其它人能够读,可是全部人都不可写增删改;
    写锁:某我的读锁了一张表,只有本人能够读增删改,其它人都不能够增删改,连 读 也不能够;
    1.加读锁:lock table tablename read;
    2.加写锁:lock table tablename write;
    3.解锁:  unlock tables;

    
第十三部分:服务器的优化
   a.四种字符集的选择:服务器字符集、数据库字符集、客户端字符集、链接字符集。
     设置方法:在mysql配置文件中【client】的属性:default-character-set=utf8
               (控制户服端字符集和链接字符集)
               在mysql配置文件中【mysqld】的属性: character-set-server=utf8
               (控制服务器字符集和数据库字符集以及继承下来的表的字符集)
              还有注意【mysqld】中的校验字符集: collation-server=utf8-general-ci;主要是做用于排序。


第十四部分:socket问题
   mysql配置文件中:
    [client]
    #password    = your_password
    port        = 3306
    socket        = /tmp/mysql.sock
   有时候登陆的时候因为socket问题登陆的时候,可使用新的命令,从新制定协议主机等:
   命令:mysql -uroot -p密码 --protocol tcp --hlocalhost
   若是socket文件丢失,重启mysql便可。

第十五部分:MySQL root密码破解     1.关闭进程或者服务:pkill mysqld    2.跳过用户受权表:D:\soft\wamp\bin\mysql\mysql5.6.17\bin mysqld_safe --skip-grant-tables --users=mysql&      全部用户的表都存在于mysql的user表中。  3.修改密码:update mysql.user set password=password('123') where user= "root" and host="localhost"     4.杀掉进程,重启mysql便可。

相关文章
相关标签/搜索