自学内容网 自学内容网

MySql

一、Mysql Linux安装
1、下载mysql rpm工具包上传至服务器: MySQL :: Download MySQL Yum Repository
2、安装mysql yum源:rpm -Uvh mysql80-community-release-el7-9.noarch.rpm
    安装成功后会在/etc/yum.repos.d/目录生成mysql repo文件
3、安装mysql:yum install mysql-community-server    
4、启动mysql:systemctl start mysqld 或  service mysqld start
        
5、确定mysql是否启动:systemctl|grep mysql
        
6、mysql服务配置
    1)、查看密码:打开/var/log/mysqld.log文件
    2)、修改密码:
            2.1、命令:mysql -u root -p  后输入原始密码
                
        
            2.2、修改密码: ALTER user 'root'@'localhost' IDENTIFIED BY 'Wnsk503220!';
                
            2.3、关闭防火墙或者开放端口
                    (1)、关闭防火墙:systemclt stop firewalld
                    (2)、开发端口:
开放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
更新防火墙规则:firewall-cmd --reload
查看防火墙开放端口:firewall-cmd --zone=public --list-ports

             2.4、更改mysql远程连接:需要新密码重新登录mysql

登录:mysql -u root -p
      password:最新密码
切换数据库:use mysql
更改远程连接:Update user set host='%' where user='root';

            2.5、重启mysql:systemctl restart mysqld 或 service mysqld restart

7、连接mysql
    1)、navcat连接mysql
    2)、提示: Authentication plugin ‘caching_sha2_password’ cannot be loaded的错误。
            由于 mysql8 之前的版本采用mysql_native_password 加密规则 mysql8之后采用caching_sha2_password 加密规则,导致navicat连接失败
    3)、还原mysql加密规则
        1、进入控制台: mysql -h localhost -u root -p
        2、切换数据库:use mysql
        3、查看用户密码规则: select user, host, plugin from user;
                
        4、修改加密规则: ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Wnsk503220!';
        5、 查看用户密码规则: select user, host, plugin from user;
                
        6、navcat重新连接测试
                
二、Mysql索引使用
    1、InnoDB和MyISAM区别

     1)、存储的结构和方式不一样:InnoDB采用聚簇索引(索引和数据是关联在一起),MyISAM采用非聚簇索引(索引和数据文件是分离的,索引保存数据文件的指针)   

        2)、事务:InnoDB支持,MyISAM不支持

        3)、锁:InnoDB支持表级锁和行级锁,MyISAM支持表级锁

                表级锁:开销小,加锁快,不会出现死锁;锁定粒度大,发生冲突概率高,并发度最低

                行级锁:开销大,枷锁慢,会出现死锁;锁定粒度小,发生冲突概率低,并发度最高

        4)、主键:InnoDB必须有主键(默认生成主键索引),MyISAM可以没有

        5)、外键约束:InnoDB支持,MyISAM不支持

        6)、InnoDB辅助索引和主键索引之间存在层级关系;MyISAM辅助索引和主键索引则是平级关系。因此主键不应该过大,其他索引也相应会很大

        5)、故障恢复:InnoDB使用redo和undo日志记录数据修改记录确保数据持久性,数据库异常通过日志可恢复,保证数据的持久性和一致性。MyISAM不支持崩溃恢复

        6)、其他:InnoDB不报错表的具体行数,执行select count(*)全表扫描,MyISAM保存整个表行数,执行效率快;InnoDB不支持全文检索(Mysql 5.7版本后也支持了),MyISAM支持全文检索效率高

2、为什么用B+树

    1、B+树和B树区别:

        1)、B+树只在叶子节点存储数据,B树的非叶子节点也要存储数据。B+树单个节点数据库量更小,在相同的磁盘IO次数下,能查询到更多节点。

        2)、B+树叶子节点采用双链表连接,适合mysql基于范围查找,B树无法做到

    2、B+树和二叉树区别:

        1)、B+树高度能维持在3~4层左右,一次数据查询操作只需3~4次磁盘IO操作,查询夫再度O(logdN);二叉树每个父节点的子节点智能是2个,层数较高,磁盘IO次数较多,查询复杂度O(logN)

    3、B+树和Hash区别:

        1)、Hash不适合范围查找,适合等职查询O(1)

3、mysql索引优化

    1、哪些索引会失效

        1)、区分度比较低的字段建立索引

        2)、使用like %xx 或者 like %xx%会造成索引失效

        3)、使用列运算、函数方法和类型转换

        4)、联合索引未遵循最左匹配原则

        5)、is null, is not null无法使用索引

        6)、负向条件无法使用索引:例如!=、<>、not in、not exists、not like 等

    

    2、具体索引优化建议

        1)、union、in、or都能使用索引,建议用in

        2)、负向条件无法使用索引,例如not in可以优化成in

        3)、联合索引最左匹配原则

                 1、区分度最高的放在最左边

                 2、存在非等号和等号混合判断,等号放在前面,例如where a>1 and b=2,把b=2放在前面

        4)、where条件多个范围,最多用于左边一个范围列,范围条件有:<、<=、>、>=、between等

        5)、索引列不要用任何运算和函数方法

        6)、强制类型转换会导致全表扫描,例如字符串字段等于数字

        7)、更新频率高于80%不要建立索引,性能和全表扫描相近,count(distinct(列名))/count(*)计算

        8)、利用覆盖索引查询,避免回表。查询的列和建立索引的列个数和字段相同,避免select *

        9)、索引不会包含有null值的列

        10)、is null和is not null 无法使用索引

        11)、order by、group by,注意索引的有序性,where a=1 and b=2 and c=3 index(a,b,c);如果索引有范围,有序性无法利用,例如where a>1 order by b

        12)、使用段索引(前缀索引):节省磁盘空间和io操作,减少索引文件的维护开销,用count(distinct leftIndex(列名, 索引长度))/count(*) 来计算前缀索引的区分度。缺点是不能用于 ORDER BY 和 GROUP BY 操作,也不能用于覆盖索引

        13)、延迟关联和子查询优化分页:当行较深,效率低,改写sql通过id条件过滤

    4、java调用存储参数化执行慢,存储重新创建或者执行OPTION(RECOMPILE)

sql语句数据库查询速度很快,java中使用sqlQuery速度很慢--OPTION(RECOMPILE)-CSDN博客


原文地址:https://blog.csdn.net/u011627218/article/details/139081761

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!