查询优化(sql及代码)

1、建立索引

详解
一般来说,应该在这些列上创建索引,例如:

第一、在经常需要搜索的列上,可以加快搜索的速度;

第二、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;

第三、在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;

第四、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;

第五、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;

第六、在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

建立索引,一般按照select的where条件来建立,比如: select的条件是where f1 and f2,那么如果我们在字段f1或字段f2上建立索引是没有用的,只有在字段f1和f2上同时建立索引才有用等。
在这里插入图片描述
在这里插入图片描述

2、优化sql

1、移除查询字段中要查询的字典表中的数据,将其在service层用枚举set进去。
2、减少连表操作入货主承运商这种数据少的可以在service层set进去。

在这里插入图片描述
在这里插入图片描述

3、java的操作要比sql快的多,连表查询效率很低

代码尽量减少数据库操作次数,数据库操作是会有网络IO和磁盘IO的

4、explain学习

详解
explain(执行计划)包含的信息十分的丰富,着重关注以下几个字段信息。

①id,select子句或表执行顺序,id相同,从上到下执行,id不同,id值越大,执行优先级越高。

②type,type主要取值及其表示sql的好坏程度(由好到差排序):system>const>eq_ref>ref>range>index>ALL。保证range,最好到ref。

③key,实际被使用的索引列。

④ref,关联的字段,常量等值查询,显示为const,如果为连接查询,显示关联的字段。

⑤Extra,额外信息,使用优先级Using index>Using filesort(九死一生)>Using temporary(十死无生)。

着重关注上述五个字段信息,对日常生产过程中调优十分有用。

5、单列索引和复合索引的应用场景 todo

详解
复合索引 :要满足最左前缀法则,如下图所示:建立复合索引name+status+addres后,查询语句中where条件中包含下面三种都会执行索引,第三种哪怕顺序不同也会执行,如果where条件为name+address只会走name单列索引。
在这里插入图片描述

6、索引失效的几种情况

主键自带索引

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用覆盖索引解决,覆盖索引指的是将Select * 中的替换了对应的索引字段。如果中包含没有索引的字段则索引失效

Guess you like

Origin blog.csdn.net/Crush_kylin/article/details/119928302