在MySQL中存储引擎有Innodb 和 MyIsam 两种
Innodb :默认使用的版本5.5 及以上,支持事务,不支持全文索引,索引和数据都存在一个文件,.ibd 表结构存在.frm文件中
MyIsam:默认使用的版本5.5 以下,不支持事务,支持全文索引, frm 存表结构,.MYD 存表数据, .MYI存表索引
全文索引使用sphinx
索引
加快查询速度
可以与新华字典的目录做一个类比,将索引理解成一个特殊的文件,没有索引的话查询数据是从前向后查找的,有了这个索引的话他是根据一个特殊的数据结构(二叉树)去查找数据。
索引分类(primary key):
主键索引: 加快查询 主键不能重复,不能为空,
主键索引添加有两种方式:在创建表的时候添加进去,第二种方法就是在创建表之后,数据添加完成以后根据实际项目需要来添加主键 : alter table 表名 change id id int auto_increment primary key .这种i添加主键的方式如果数据量
过大的时候,添加时会比较慢,但是创建完成后使用主键索引查找数据就会非常快。
删除主键的方式: alter table t5 change id id int primary key
alter table t5 drop primary key
唯一索引(unique) :加快查询速度,不能重复 在创建方式上也有两种方式:在创建表的时候添加,第二种方式是
根据实际需要再添加唯一索引
第二种方式添加唯一索引:create unique index 索引名称 on 表名
删除索引: alter table t5 id id int auto_incerment primary key
联合唯一索引(unique(列名1,列名2)):加快查询速度,生成的数据组合不能重复出现第二次创建方式上和前面两种一样。
第二种添加索引方式:create unique index 索引名称 on 表名
删除索引 :drop index 索引名 on 表名
普通索引(index):加快查询速度,创建方式如上
第二中方式创建: create index 索引名 on 表名
删除索引 : drop 索引名 on 表名
索引的添加有讲究的,频繁使用的列上可以添加索引,索引添加太多也不好,在版本低的MySQL数据库上,索引添加过多在对数据操作时,如更新删除的话,索引会进行重新排序,索引过多就会占用大量时间。版本高的话影响似乎不大。
索引的使用
explain 是一个查看是否使用索引和sql语句执行索引效率的小工具。会生成一个报告可以查看使用索引的情况和执行效率。
sql语句使用规则:不建议使用like进行搜索,会用不到索引,
组合索引最左前缀:会按照左边的来查找,如果只使用右边的索引来查找,就不会是使用索引
慢日志查询:将执行很慢的sql语句记录到文件中,用于后续的改进使用
开启步骤:
1 show variables like '%query%'
2 set global long_query_time=2
3 set global slow_query_log=ON
4 slow_query_log_file = E:\program\mysql-5.6.44-winx64\data\oldboy-slow.log
普通日志记录
SQL审计 :记录sql的操作语句
show variables like '%general%';
+------------------+------------------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------------------+
| general_log | ON |
| general_log_file | E:\program\mysql-5.6.44-winx64\data\oldboy.log |
+------------------+------------------------------------------------+
set global general_log = ON;
权限管理:
创建用户
create user '用户名'@'IP地址' identified by '密码';
creaee user 'zekai'@'192.168.1.123' identified by '123qwe';
creaee user 'zekai'@'192.168.1.%' identified by '123qwe';
create user 'zekai'@'%' identified by '123qwe';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
修改密码
set password for '用户名'@'IP地址' = Password('新密码')
授权:
grant 权限 on 数据库.表 to '用户'@'IP地址' -- 授权
grant select on db1.* to 'zekai'@'%';
grant select on *.* to 'zekai'@'%';
grant select, insert, delete on db1.* to 'zekai'@'%';
记住:
flush privileges;