文档章节

MySQL高级优化

笨小熊
 笨小熊
发布于 2017/02/14 16:25
字数 1768
阅读 43
收藏 1

第一部分 

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

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

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

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

 


第二部分:mysql常用操作

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

2.复制表数据:insert into t2  select * from t1;
  注:这样有可能会出错,最好表明字段;只有在两个表的结构完全一样的情况下,才会成功。

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好;

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即可。

© 著作权归作者所有

笨小熊
粉丝 13
博文 152
码字总数 68269
作品 0
深圳
高级程序员
私信 提问
2014年,什么工作最吃香?数据存储架构师!

大会介绍: 2014年,什么工作最吃香?数据存储架构师! 无论是Oracle还是MySQL数据库,还是百度、腾讯、阿里巴巴,现在都需要闪存(如SSD固态盘)来优化数据存储架构,1、2年内你的企业也必然...

向南是大海
2014/10/11
0
0
2014年,什么工作最吃香?数据存储架构师!

大会介绍: 2014年,什么工作最吃香?数据存储架构师! 无论是Oracle还是MySQL数据库,还是百度、腾讯、阿里巴巴,现在都需要闪存(如SSD固态盘)来优化数据存储架构,1、2年内你的企业也必然...

向南是大海
2014/10/09
0
0
2014年,什么工作最吃香?数据存储架构师!

大会介绍: 2014年,什么工作最吃香?数据存储架构师! 无论是Oracle还是MySQL数据库,还是百度、腾讯、阿里巴巴,现在都需要闪存(如SSD固态盘)来优化数据存储架构,1、2年内你的企业也必然...

向南是大海
2014/10/09
0
0
上海大众点评急聘--资深 MySQL DBA、Java、.net、ETL、BI、搜索、邮件开发、资深android

1、ETL/BI开发工程师(10-20K) 2、邮件系统高级开发工程师(10-20K) 3、财务系统开发工程师(10-20K) 4、资深android开发工程师 (10-20K+) 5、高级Java后台开发工程师(10-20K) 6、搜索...

找工作的看过来
2011/08/17
1K
4
沃趣微讲堂索引| PXC、MGC&MGR原理与实践对比

讲师 | 罗小波·沃趣科技高级数据库技术专家 出品 | 沃趣科技 讲师介绍 - 罗小波 - 沃趣科技高级数据库技术专家 IT从业多年,历任运维工程师,高级运维工程师,运维经理,数据库工程师,曾参...

老叶茶馆_
01/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
42分钟前
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
8
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
78
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部