MySQL自学之旅(最难不过坚持)

1.注释: 单行注释:- -注释内容 或 # 注释内容(MySQL特有)

多行注释:/* 注释内容*/

2.客户端连接:mysql -u root -p

3.不要在系统库里面进行任意的操作

4.char(定长字符串)  varchar(变长字符串)

5.

索引:sql优化,主要优化的是查询语句

通过sql执行频率确定当前数据增删改查比例,从而确定优化方案,如果增删改为主,优化程度可以放轻。

复合索引:业务允许的情况下,尽量使用  >=  来取代  >

不要再索引列上进行运算操作,否则索引会失效

如果最左索引为整形时,like ’11%‘照样会失效,varchar类型不会

回表查询:先进行二级查询在进行聚集查询

聚集索引的叶子节点下挂的是这一行的数据

二级索引的叶子节点下挂的是该字段值对应的主键值

使用select * 很容易出现回表查询,降低性能

前缀索引肯定会回表,用来解决一些长字符串或者大文本字段在整个字段进行索引的时候,索引体积过于庞大而造成浪费大量磁盘io的情况

多条件联合查询时,MySQL优化器会评估哪个字段索引效率更高,会选择该索引完成本次查询

在创建联合索引的时候,需要考虑语法中字段的前后顺序,这涉及最左前缀法则

优化SQL主要是针对查询频次较高的数据库进行优化

通过load指令可以一次性将本地文件的数据全部载入数据库

面试题:为什么建议使用自增字段不用唯一字段作为主键 答:可能会存在页分裂现象

UUID:不重复的随机字符串  所以每一次生成UUID是无序的,插入时就是乱序插入,可能会存在页分裂现象,而且UUID和身份证号等做主键时由于长度比较长,查询时会浪费磁盘IO

order by书写时就指定了谁前谁后,所以就可能违背最左前缀法则,where好像不是,只要有最左列就可以

单列索引没有组合索引快

覆盖索引:select的数据列只用从索引中获取即可,不必读取数据行

Using index:表明相应的select操作使用了覆盖索引,避免了访问表的数据行

Using filesort:需要将返回结果在排序缓冲区排序

聚合函数自动忽略null值

按照效率排序的话,count(字段)<count(主键id)<count(1)<count(*),所以尽量使用count(*)

在执行update语句的时候一定要根据索引字段进行更新,并且索引不能失效,否则会出现行锁升级为表锁

SQL优化总结:加索引


data_add和data_sub函数分别是从指定日期中加上和减去指定时间间隔的函数

group by分组的时候写分组的字段和聚合函数

猜你喜欢

转载自blog.csdn.net/qq_42784882/article/details/129224648