MySql 调优

Posted 随笔`

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql 调优相关的知识,希望对你有一定的参考价值。

1.查询的方式: 二叉树,平衡二叉树(B-tree),完全平衡二叉树(B+Tree) 

区别:https://blog.csdn.net/yuxin6866/article/details/52327328

2.数据库sql优化:

    1).尽量少用 * 做查询列条件,

    2).尽量不要在 列中插入函数计算,

    3).尽量不用 like % 

3.建联合索引列选择的原则:

    1)经常用的列优先[最左匹配原则] 

    2)选择性(离散度)高的列优先[离散度高原则]

    3)宽度小的列优先[最少空间原则]

以上都 二叉树查询相关知识

 

问题解答:

1.索引列的长度越短,一个数据页(默认是4k)中存储的关键字的数量就越多,树的深度就越浅,查询需要读取的节点就越少,查询效率就更高

2.因为联合索引的规则:类似于多个单列索引按到建索引的顺序拼凑成一个新的单列索引,所以同问题一一样,列数越少,索引长度就越短,查询效率就越高

3.  1)匹配前列9999% 可能用到索引,原因是二叉树中的比较方式  一般是从左往右比,单个字符的asiic码值比较,在遇到%之前的值是确定的,所以可以用索引去匹配一部分,但是有一点需要注意:

          ①如果%前面的字符存在很多列都相同的话,数据库会认为这个列的值不用索引和用索引查找都是一样的,数据库就会放弃索引,直接全表查找.

     2)如果%在前面,二叉树查询的方法默认所有的值都符合要求,这样列的离散度就会变得极低,(相当于3.1.1) 数据库就会弃用索引的方式去匹配,

4.同理 not in 和<> 也是3.2这个原理

     一般不要用如下的字句: 

    "IS NULL", " <>", "!=", "!>", "! <", 

    "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE \'%500\'",

    因为他们不走索引全是表扫描。也不要在WHere字句中的列名加函数,如Convert,substring等,如果必须用函数的时候,创建计算列再创建索引来替代.还可以变通写法:WHERE SUBSTRING(firstname,1,1) = \'m\'改为WHERE firstname like \'m%\'(索引扫       描),一定要将函数和列名分开。并且索引不能建得太多和太大。NOT IN会多次扫描表,使用EXISTS、NOT EXISTS ,IN , LEFT OUTER JOIN 来替代,特别是左连接,而Exists比IN更快,最慢的是NOT操作.如果列的值含有空,以前它的索引不起作用,       现在2000的优化器能够处理了。相同的是IS NULL,“NOT", "NOT EXISTS", "NOT IN"能优化她,而” <>”等还是不能优化,用不到索引。 

    在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数 

5.原因是,*,在数据库中不能使用索引的方式去查找,而指定列去查找,有可能会出现覆盖索引的情况,会大大提高查询的效率,

 

后面几条河 3 , 4 类似,都是索引失效的问题.

 

以下是关于数据库大批量数据数据库设计的建议

  https://blog.csdn.net/Jason18086483725/article/details/78519070

 

  

以上是关于MySql 调优的主要内容,如果未能解决你的问题,请参考以下文章

性能调优调优的常见思路和方法

性能调优调优的常见思路和方法

性能调优调优的常见思路和方法

03JVM调优调优--2.基础:参数说明(堆参数说明),垃圾收集器(前置知识:垃圾回收算法,GC种类),垃圾收集器(种类,相关介绍)

Kafka 调优

Python分类模型实战(KNN逻辑回归决策树SVM)调优调参,评估模型——综合项目