2021-04-29

Msql

1.索引优化

b+树

h=㏒(m+1)N

1.索引字段尽量小,h:b+树的高度;m 每个磁盘的数据项数量;N:当前数据表的数据。磁盘块大小是固定,索引字段越小,磁盘块存数据项的数量越多,m越大,h就会越小。b+树的的IO次数取决于h(树的高度),h越小IO次数越小,数据加载到内存的次数也越少(数据是加载到内存中查找的),那么查询效率也越高。

2.索引最左匹配特性(从左往右匹配):比较因子放在左边的会优先筛选,再往右依次比较。所以在左边的比较因子需要有比较强的特征性。

1
2
3
4
5
6
7
8
9
10
11
索引分类
1.普通索引index :加速查找
2.唯一索引
主键索引:primary key :加速查找+约束(不为空且唯一)
唯一索引:unique:加速查找+约束 (唯一)
3.联合索引
-primary key(id,name):联合主键索引
-unique(id,name):联合唯一索引
-index(id,name):联合普通索引
4.全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
5.空间索引spatial :了解就好,几乎不用

索引两大类型

1.hash类型索引:查询单条快,范围查询慢。

2.btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

2.sql优化

1.设置合适的字段属性

2.尽量把字段设置为not null 。避免数据库比较null值

3.使用join代替子查询

4.避免函数索引

5.用in来替换or

6.like使用两个百分号无法使用索引。

7.适当使用limiit m,n

8.避免数据类型不一致 (查询int 不加引号,查询字符类型加引号)

9.分组统计可以i禁止排序(为了避免排序消耗加入 order by null)

10.避免随机取记录

1
2
3
4
SELECT * FROM t1 WHERE 1=1 ORDER BY RAND() LIMIT 4;
MySQL不支持函数索引,会导致全表扫描
—–>
SELECT * FROM t1 WHERE id >= CEIL(RAND()*1000) LIMIT 4;

11.批量iinsert,尽量使用一条语句,不使用多条insert。

部分参考
原文链接:https://blog.csdn.net/weixin_42047611/article/details/81772149