一、linux系统安装Mysql
1、mysql安装包:
MySQL :: Download MySQL Community Server
2、mysql安装
linux安装在vmware(虚拟机)上,先打开虚拟机
获取ip地址,ifconfig
通过远程连接工具secureCRT连接
1)查找当前mysql安装包版本 rpm -qa | grep -i mysql
2)版本过低卸载
Rpm -e mysql安装包版本 --nodeps
3)mysql安装包上传
将mysql安装包放在D盘setup目录下
Alt+P进入到上传界面,使用put指令上传安装包
put D:/setup/mysql安装包名
上传成功后,就可以在Linux系统中看到此安装包
4)解压mysql压缩包,tar
创建目录名为mysql的文件夹:mkdir mysql
ll
将mysql压缩包解压到mysql文件中
tar -xvf mysql压缩包 -C mysql/
解压完成
5)安装依赖包(第三方的依赖库)
在线安装:
yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 libncurses.so.5 --setoopt=protected_multilib=false
yum update libstdc++-4.4.7-4.el6.x86_64
6)安装mysql客户端和服务端,client.rpm,server.rpm
rpm -ivh MySQL-client-***.rpm
rpm -ivh MySQL-server-***.rpm
3、mysql启动和停止
mysql状态 service mysql status
mysql启动 service mysql start
mysql停止 service mysql stop
4、mysql登录
mysql -u root -p
密码:查看安装mysql服务端的日志,随机生成了一个密码 cat /root/.mysql-secret
修改密码:set password=password('root');
重新登陆: mysql -u root -p
root
5、windows使用工具连接linux上mysql,sqlyog
连接不了,原因是:未授权远程访问
授权远程访问:grant all privileges on *.* to 'root' @'%' identified by 'root';
刷新权限列表使授权生效:flush privileges;
6、再次连接,连接不了
是linux的防火墙导致的
查看防火墙的状态:service iptables status
关闭防火墙:service iptables stop
7、windows远程连接linux成功
二、索引
1、索引概述
索引(index)是帮助mysql高效获取数据的数据结构
索引的作用:高效查询
根节点
比根节点小 比根节点大
以二叉树为例,数据:34 77 5 91 22 59 3
34
5 77
3 22 59 91
在数据之外,数据系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引向(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2、索引优缺
优势:
1)类似于书籍的目录索引,提高数据检索的效率,降低数据库的io成本即快速查询数据
2)通过索引列对数据进行排序,降低数据排序的成本,降低cpu的消耗
劣势:
1)实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的积累,所以索引列也是要占用空间的即索引需要占用磁盘空间
2)虽然索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行insert、update、delete.因为更新表时,mysql不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息即索引字段并不是越多越好,索引字段越多会降低查询数据的效率
3、索引结构
索引是在mysql的存储引擎层中实现的,而不是在服务器层实现。所以每种索引引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型。
主流的四种索引结构:
*btree索引:innoDB引擎支持btree索引
hash索引
R-tree索引
Full-text(全文索引)
我们平常所说的索引,如果没有特别指明,都是指B+树(多路搜索树,并不一定是二叉树)结构组织的索引。其中聚集索引、复合索引、前缀索引、唯一索引默认都是使用B+tree索引,统称为索引。
1)btree结构
btree又叫多路平衡搜索树,一棵m叉的btree特性如下:
- 树中每个节点最多包含m个孩子
- 除根节点与叶子节点外,每个节点至少有[cell(m/2)]个孩子 注:向上取整
- 若根节点不是叶子接待你,则至少有两个孩子
- 所有的叶子节点都在同一层
- 每个非叶子节点由n个key与n+1个指针组成,其中[cell(m/2)-1]<=n<=m-1
以5叉为例,公式推导[cell(m/2)-1]<=n<=m-1所有2<=n<4,当n>4时,中间节点分裂到父节点,两边节点分裂
插入C N G A H E K Q M F W L T Z D P R X Y S 数据为例
演变过程:
1.1)插入前4个字母 C N G A
A |
C |
G |
N |
1.2)插入H,n>4,中间元素G字母向上分裂到新的节点
G
A C H N
1.3)插入E K Q 不需要分裂
G
A C E H K N Q
标黄代表n的个数,大于4就要向上分裂
1.4)插入M,n>4,中间元素M向上分裂到父节点G
G M
A C E H K N Q
1.5)插入F W L T 不需要分裂
G M
A C E F H K L N QTW
1.6)插入Z,中间元素T向上分裂到父节点中
G M T
A C E F H K L N Q WZ
1.7)插入D,中间元素向上分裂到父结点中,然后插入PRXY不需要分裂
D G M T
A C E F H K L NP QR WXYZ
1.8)最后插入S,NPQRn>4,中间节点Q向上分裂,但分裂后父节点DGMTn>4,中间节点M向上分裂
M
DG Q T
A C E F H K L NP RS WXYZ
到此,该tree树就已经构建完成,btree树和二叉树相比,查询数据的效率更高,因为对于相同的数据量来说,btree的层级结构比二叉树小,因此搜索速度快
2)B+tree结构
B+tree为btree的变种,B+tree与btree的区别为:
优点