MySQL存储引擎 和索引

时间:2019-06-17
本文章向大家介绍MySQL存储引擎 和索引,主要包括MySQL存储引擎 和索引使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在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添加主键的方式如果数据量

过大的时候,添加时会比较慢,但是创建完成后使用主键索引查找数据就会非常快。

删除主键的方式: drop primary key on 表名

唯一索引(unique) :加快查询速度,不能重复  在创建方式上也有两种方式:在创建表的时候添加,第二种方式是

根据实际需要再添加唯一索引

第二种方式添加唯一索引:create unique index 索引名称 on 表名

删除索引: drop  索引名称 on 表名

联合唯一索引(unique(列名1,列名2)):加快查询速度,生成的数据组合不能重复出现第二次创建方式上和前面两种一样。

第二种添加索引方式:create  unique index 索引名称 on 表名

删除索引 :drop  索引名 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;

原文地址:https://www.cnblogs.com/1624413646hxy/p/11042023.html