mysql 点总结
Posted jomini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 点总结相关的知识,希望对你有一定的参考价值。
2、mysql 配置文件
二进制日志 log-bin 主从复制
错误日志 log-error 默认关闭、记录警告和错误、启动和关闭详情
查询日志 log :默认关闭,记录查询的sql,开启会降低整体性能
数据文件 /var/lib/mysql frm:存放表结构
myd:存放表数据
myi:存放表索引
相关配置:windows-my.ini Linux-/etc/my.cnf
3、存储引擎
myisam : 表锁、只缓存索引
innodb : 支持主外键,支持事务,行锁,缓存索引和真实数据
4、索引
<1>排好序的快速查找的一种数据结构
<2>什么情况下,需要创建索引
(1)主键自动建立唯一索引
(2)频繁作为查询体哦阿健的自读那要创建索引
(3)查询中与其他表关联的字段
(4)查询中排序的字段
(5)查询中统计或者分组的字段
<3>什么情况不创建索引
频繁更新的字段不适合创建索引
where条件里用不到的字段不创建索引
表记录很少的
数据重复且平均分布的字段
<4>单值索引和组合索引的选择问题?
高并发建议组合索引(过滤性做好的字段排在前面
<5>避免索引失效
(1)最佳左前缀法则
(2)不在索引上做任何操作
(3)存储引擎不能使用索引范围条件右边的列
(4)尽量使用覆盖索引(只查询索引列)!=<>无法使用索引慧导致全表扫描
(5) is null, is not null 也无法使用索引
(6) like ‘%abc...‘ 索引失效会导致全表扫描
(7) 字符串 不加单引号 索引失效
(8) 少用 or , 索引失效
<6>查询优化
(1) 小表驱动大表
(2) order by 子句尽量避免fileSore, order by 子句使用索引最左前列,
或者 where 子句与 order by 子句条件组合满足索引最左前列
(3) group by 先排序后分组,遵照最佳左前缀,
where 高于having, 尽量在where中限定条件
-------- 在这里面试官肯定会问,有没有做过sql调优
- 1、使用explain, 查看执行计划;
1.1、能干吗呢
(1)表的读取顺序;
(2)数据读取操作的操作类型;
(3)哪些索引可以使用;
(4)哪些索引实际使用;
(5)表之间的引用;
(6)每张表有多少行被优化器查看
5、分区、分库、分表
查看表分区 SHOW VARIABLES LIKE ‘%partition%‘
range 分区,list 分区
mysql 单表容量不超过500W, 否则要水平拆分
6、行表锁
<1> 查询锁: mysql>show open tables;
<2> 读锁:共享锁 lock table 表名 read;
<3> 写锁:独占锁 lock table 表名 write;
<4> 表锁偏读(myisam)、行锁偏写(innodb)
<5> 表锁分析:
(1)读锁示例: session1 加表1 的读锁
session2 可读, 不能改(排队等待)
session1 不可改,不可改其他表
(2)写锁示例: session1 加表1的写锁
session1 可读写操作
session2 不能读(排队等待)
(3)如何分析表锁定
sql:show status like ‘table%‘;
table_locks_immediate: 产生表级锁定的次数
table_locks_waited: 出现表级别锁定争用而发生等待的次数
总结:读锁会阻塞写,单不会阻塞读;
写锁会把读写都阻塞
<6> 行锁分析
show status like ‘innodb_row_lock%‘
7、主从复制
slave 会从maaster读取binglong进行数据同步,slave将master的binlog
拷贝到它的中继日志,mysql 的复制是异步且串行化的;
https://www.bilibili.com/video/BV1DK4y1C7o7?from=search&seid=2252694201214978095
以上是关于mysql 点总结的主要内容,如果未能解决你的问题,请参考以下文章
MySQL的优化点总结---通过计算多种状态的百分比看MySQL的性能情况
SQL Server 与MySQL中排序规则与字符集相关知识的一点总结