在研究mysql优化之前首先要了解mysql语句的分类供四类:
1,DDL 操作数据库表结构,
2,DML 操作数据行的增删改,
3,DQL 查询语句,其执行顺序是
1,执行from
2,执行where
3,是group by 和 having,
4,select,
5,是order by,
6,是limit。
所以在where中不能使用字段的别名,但是在order by中就可以。
4,DCL 权限控制语句,谁能够访问数据库,能访问那些数据。
4.1,查询用户,
USE mysql;select * from user;
host: 主机地址。在哪个主机上可以访问;
User:用户。
4.2,创建用户
create user 'user1'@'localhost' identified by '123456'; # 创建密码是123456的user1,只能本地访问。
create user 'user2'@'%' identified by '123456'; #任何主机都可以访问。
4.3,修改用户密码
alter user 'user1'@'localhost' identified with mysql_native_password by '1234';
4.4,删除用户
drop user 'user1'@'local';
4.5 权限控制 权限列表
ALL SELECT INSERT UPDATE DELETE ALTER DROP CREATE
所有权限 查询权限 插入
4.6 查询权限
show grants for 'user1'@'localhost';
4.7 授予权限
grant 权限列表 on 数据库名.表明 to 'user1'@'localhost';
grant all on mysqldb.* to 'user1'@'localhost';
4.8 撤销权限
revoke all on mysqldb.* to 'user1'@'localhost';
然后是sql语句优化,DDL和DCL语句没啥可以优化的,
DML语句:
1,插入:
a,批量插入,每次1000-2000条;手动提交事务;
b,大批量数据使用load指令:mysql --local-infile -u root -p
select @@local-infile;set global local_infile = 1;
load data local infile '/root/sql/tb_sku1.sql' into table `tb_sku` fields terminated by ',' lines terminated by '\n';
c,主键优化。(数据组织方式,表数据根据主键顺序存放。称为索引组织表)
c1,插入数据时选择顺序插入,主键乱序插入会发生页分裂现象,页合并现象。
c2,尽量降低主键的长度。
c3,避免对主键的修改。
2,update语句:更新数据时需要使用索引字段,否则会锁表。有索引就是行锁。
DQL语句优化,最主要的就是设计合理的索引。
1,order by:
a,尽量覆盖索引。这个并不容易实现
b,适当增加 sort_buffer_size 大小 默认256K.
2,limit:大数据量越靠后的数据性能越低,可以使用子查询+覆盖索引。
select * from t ,(select id from t limit 10000,10) k where t.id = k.id;
3,count(*):null值不会计数。count(*) 效率最高。
4,增加内存分配,专属服务器建议80%的内存都要分配给内存缓冲区 buffer pool,提高mysql响应效率。
客户端工具:
mysql
mysqldump / mysqlimport、source 导出/导入
mysqlbinlog
mysqladmin
mysqlshow