Mysql数据库/性能优化/负载均衡

数据库:

1、设计

a、数据表引擎:1 innodb  2 myisam

b、数据值类型:

1、数值类型:tinyint   int

2、字符串类型: char   varchar   text

3、时间类型:int

c、数据字段属性:

1、unsigned: 无符号

2、zerofill: 0 填充 

不够前面填充0

3、auto_increment :自增

create table user(

      id int unsigned auto_increment primary key,

      username varchar(500)

);

4、null

5、not null

6、default

d、数据表对象管理

e、数据表类型及存储位置

f、数据表的默认字符

1、建议各户端字符集是utf8:default-character-set = utf8

2、mysql服务端字符集为utf8: character-set-server = utf8

3、mysql服务端校验字符集: collation-server = utf8_general_ci

g、索引管理

1)服务器管理

2)数据库管理

3)表管理

4)字段管理

a、添加字段:

alter table user add age tinyint unsigned not null;

alter table user add age tinyint unsigned not null after user;

b、删除字段:alter table user drop password;

c、修改字段:alter table user modify username varchar(30) not null;

修改字段名:alter table user change username  user varchar(30) not null;

d、查看字段:

5)索引管理

1、主键

删除:alter table user modify id int unsigned not null;

alter table user drop primary key;

2、唯一索引: alter table user add unique u_username(username);

删除:alter table user drop index u_username;

3、普通: alter taber user add index i_username(username);

删除:alter table user drop index i_username;

2、操作

1)sql语句

增:insert into user(username,password) values('user1','123');

删:delete from user where id=5;


Mysql数据库/性能优化/负载均衡_第1张图片
检索删除数据的效率

改:update user set password='123' where id=2;

查:select * from user;

select * from user where between 3 and 7;(包含id3~id7的用户)

select * from user where id in(1,3,5); (查询id1,3,5的用户)

2)单表查询

a、给字段名起别名: select username user,password pass from user;

b、distinct关键字的使用:select distinct password from user;

c、模糊查询:select * from user where username like '%u%';(%匹配所有,_匹配一个字符 这一列索引失效)。

d、查询值为null的行: select * from user where password is null;

e、查询值不为null的行:select * from user where password is not null;

f、order by 排序: select * from user order by id desc;(排序分文升序[asc]和降序[desc])。

g、使用limit限定输出条数:

1)、前5条:select * from user limit 5;

2)、从第四条取3条: select * from user limit 3,3;

h、连接函数concat():select concat('id:',id) id,user from user1;


Mysql数据库/性能优化/负载均衡_第2张图片
可以取别名


Mysql数据库/性能优化/负载均衡_第3张图片
concat位置放后面也是可以


Mysql数据库/性能优化/负载均衡_第4张图片
select (id-1) id, user from user1;

i、随机数rand():select * from user order by rand() limit 1;

j、统计个数count():select count(*) from user;

k、求和sum():select sum(id) from user;

l、求平均值avg(): select avg(id) from user;

m、求最大值 max(): select max(id) from user;

n、求最小值 min(): select min(id) from user;

0、分组聚合的使用 group by: select * from user group by class;

    select class ,max(id),min(id),count(*),sum(id),avg(id) from user group by class;


Mysql数据库/性能优化/负载均衡_第5张图片

3)多表查询

a、普通多表查询


Mysql数据库/性能优化/负载均衡_第6张图片


Mysql数据库/性能优化/负载均衡_第7张图片


Mysql数据库/性能优化/负载均衡_第8张图片

b、嵌套查询或子查询(用的比较少)


Mysql数据库/性能优化/负载均衡_第9张图片
嵌套查询


Mysql数据库/性能优化/负载均衡_第10张图片

c、链接查询

      1)左链接


Mysql数据库/性能优化/负载均衡_第11张图片
每个班级的总人数(left join  on)

      2)右链接


Mysql数据库/性能优化/负载均衡_第12张图片
班级总人数(right join   on)

      3)内链接


Mysql数据库/性能优化/负载均衡_第13张图片
内链接(inner join on)

myisam表引擎

1.user.frm:  表字段

2、user.myd : 表数据

3、user.myi : 表索引

innodb表引擎

1、user.frm:  表字段

2、user.idb:表索引+ 表部分数据

3、ibdata1: 所有数据库中的所有表共享存储文件

基本命令

开启数据库 :sudo service mysqld start

关闭数据库:sudo service mysqld stop

进入数据库: mysql -uroot -p

1、查看数据库:show databases

2、进入数据库: use test

3、查看所有表:show tables

4、查看表结构:desc user

5、退出mysql: exit ;

6、创建表结构:


创建表结构

7、添加数据:insert into box(id,username,password) values(1,'user1','234');

8、创建数据库:create database test1;

9、删除数据库:drop database test1;

10、删除表:drop table box,box1;

11、修改表名:rename table box to box1


操作数据中如出现错误 可以直接中段:\c

delete 与 truncate 的区别:

1、delete清空表数据,但不会清除计数器(自增):delete from user。

2、truncate清空表数据,同时会清除计数器(自增):truncate user。

单独设置某个数据库字符集:alter database test character set utf8;

单独设置某个表字符集:alter table user character set utf8;

查看当前表的情况:show create table user;

查看mysql支持的编码:show character set;

查看系统字符集等情况:\s


Mysql数据库/性能优化/负载均衡_第14张图片

mysql查函数:


Mysql数据库/性能优化/负载均衡_第15张图片

复制表结构:

1、复制表结构:create table student like user;

2、复制表内容:insert into student select * from user;

mysql索引:

1、查看索引:show index from user  \G;

2、普通索引

a、创建索引:create index i_age on user(age);

b、删除:drop index i_age on user;

3、唯一索引:

a、创建:create unique index u_username on user(username);

b、删除:drop index u_username on user;

4、主键索引:

a、创建:alter table user add primary key (id);

b、删除:alter table user drop primary key;

Mysql数据库/性能优化/负载均衡_第16张图片

mysql视图:

1、创建:create view userclass as select user.username,user.age,class.name from user,class where user.class_id=class.id;

2、删除:drop view userclass;

3、查看:show tables;

4、查看试图数据:select * from userclass;

5、视图的特性:当表中的数据发生变化时视图数据也会随着发生变化。

mysql字符串函数:

1、字符串连接:concat();

例子:select concat('php','linux');

2、转小写:lcase();

3、转大写:ucase();

      例子:select ucase(username),age from user;

4、长度:length();  例子:select length('linux');

5、去除左边的空格:ltrim();   select length(ltrim('     linux'));

6、去除右边的空格:rtrim();    select length(rtrim('     linux'));

7、重复:repeat();    select concat(repeat('-',20),'linux');

8、替换:replace();  select replace('linux and java','linux','php');

9、截取:substring(); select substring('/usr/local/src',6,5);

10、空格:space();   select concat('linux',space(20),'php');

mysql数学函数:

1.把十进制转二进制 bin(): select bin(10)

2.向上取整  ceiling() :select ceiling(10.5);

3.向下取整  floor(): select floor(10.5);

4.取最大值max()

5.取最小值min()

6.开平方 sqrt()

7.随机数 rand()

mysql日期函数

1、当前日期  curdate()

2、当前时间  curtime()

3、当前日期和时间  now()

4、当前日期时间戳unix_timestamp()

5、时间戳转日期  from_unixtime()

6、一年中的第几周   week()

7、日期中的年部分  year()

8、日期差值  datediff()

重排auto_increment方法:alter table user auto_increment=1;

mysql 中命令的帮助:1、简单 ? create   2、更多: ? fun%

巧用rand()提取随即行:select * from user order by rand() limit 3;

正则表达式的使用:


Mysql数据库/性能优化/负载均衡_第17张图片
正则表达式

1、以linux开始的数据

select * from test where username regexp '^linux';

Mysql数据库/性能优化/负载均衡_第18张图片


Mysql数据库/性能优化/负载均衡_第19张图片

检查服务器增删改和查的使用频次:


Mysql数据库/性能优化/负载均衡_第20张图片
Mysql数据库/性能优化/负载均衡_第21张图片
Mysql数据库/性能优化/负载均衡_第22张图片

定位执行效率较低的SQL语句:

1、explain或desc定位一条sql语句的影响行数。

Mysql数据库/性能优化/负载均衡_第23张图片

2、查看mysql的慢查询日志: show variables like '%quer%';

a、查看慢查询日志是否开启

1、慢查询开启状态  :slow_query_log   |   ON

2、日志存放的地址: slow_query_log_file   |  /var/log/mysqld.log

3、查询超过多少秒才记录: slow_query_time  |  10

Mysql数据库/性能优化/负载均衡_第24张图片

3、查看慢查询的次数:

show status like '%quer%';

slow_queries  |  0

设置开启慢查询

1、重启后失效:set global slow_query_log = 1;

2、在/etc/my.cnf修改(slow_query_log  1为开启,0为关闭)

Mysql数据库/性能优化/负载均衡_第25张图片

如何快速添加数据:

1、复制表: create table sylvia like test;

2、复制表内容: insert into sylvia select * from test;

3、自己填充自己:insert into sylvia(username,age,class_id) select username,age,class_id from sylvia;

Mysql数据库/性能优化/负载均衡_第26张图片
日志查看

优化表的语法格式:optimize table sylvia; (只对MyISAM,BDB和 InnoDB的表起作用)。

Mysql数据库/性能优化/负载均衡_第27张图片

check表检查:check table class

Mysql数据库/性能优化/负载均衡_第28张图片

索引的存储问题:

1、myisam

a、frm  表结构

b、myd  表数据

c、myi   表索引

2、innodb

a、frm   表结构

b、ibd  索引+部分表数据

c、ibdata1  所有表共享空间

复合索引:对于创建的多列索引,只要查询的条件中用到最左边的列,索引一般就会被使用。

null判断:当判断null值时会使用这一列的索引。

like关键字:当使用like进行搜索时,%在后的可能有用,%在前索引可能会失效。

Mysql数据库/性能优化/负载均衡_第29张图片
%在后面索引才有可能不失效

or关键字:在使用or的情况下两边的索引都有可能失效。

desc select * from user where username='user7' or age=15\G

字段和值类型不同:当条件中字段和值的类型不同时,该字段的索引可能会失效

desc select * from user where username=200\G

查看索引的使用频次:show status like '%Handler_read%';

Handler_read_key :越大越好

Handler_read_rnd_next: 越小越好

Mysql数据库/性能优化/负载均衡_第30张图片

查看插件:show plugins;

Mysql数据库/性能优化/负载均衡_第31张图片

多表查询索引使用:


字符集设置:vi /etc/my.cnf   (设置好之后重启mysql:sudo service mysqld restart)


Mysql数据库/性能优化/负载均衡_第32张图片
配置文件my.cnf 设置


Mysql数据库/性能优化/负载均衡_第33张图片
查看也可以用   \s

mysql root密码破解

1、密码没有忘记,改密码: set password=password('123');

2、忘记密码


Mysql数据库/性能优化/负载均衡_第34张图片

mysql数据备份
1)window dos下备份:mysqldump  --no-defaults -uroot -p test > test.sql

建库语句、去除多余注释和去除表锁语句,方便sql导入:

mysqldump  --no-defaults -uroot -p test  -B test --skip-add-locks  --compact > test.sql

2) Linux 备份:mysqldump -uroot -p test > test.sql


mysql数据恢复

1)window  dos下恢复: mysql -uroot -p < test.sql

2) Linux   下恢复:mysql -uroot -p test < test.sql

你可能感兴趣的:(Mysql数据库/性能优化/负载均衡)