Mysql 查询优化,排序,特殊使用等-年度总结

一.优化

1.数据表联查优化

                            1.先执行where过滤,再联查;
                            2.合适的组合索引,
                            3.字段值:
                                1)尽量使用数字类型
                                2)设置默认值,避免where使用字段 = null;
                            4.慎用某些关键字/字符(in,!=,*),适当使用exists/not exists;

2.limit的优化

    普通:
           SELECT * FROM table1 WHERE `key` >1000000 LIMIT 100000,5;
     内联 :a表内联-临时表(使用a表 limit得出的结果集)
           SELECT * FROM table1 a
           INNER JOIN (SELECT `key` AS id FROM table1 WHERE `key` >1000000 LIMIT       100000,5 ) b ON a.`key` = b .id;

3.排序优化:
                                

  1)尽量使用索引的正序排序,不单独使用order by

  2)使用索引排序时:组合索引-结合where字段的索引和排序字段索引

二.查询结果集排序的序号

       SELECT @rank:=@rank + 1 AS rank_no                   //@rank 临时变量, @rank:=@rank + 1 初始值+1
       FROM 
                 (SELECT 表字段 FROM 表名 ORDER BY `key` DESC ) a, //结果集排序
                 (SELECT @rank:= 0) b//临时变量初始值

三.其他

1.指定一个自增主键的初始值

     alter table tbname auto_increment = x;

2.lpad((str,len,padstr))

         用字符串 padstr对 str进行左边填补直至它的长度达到 len个字符长度,然后返回str,如果str的长度长于len,那么它将被截除到len个字符;

3.给定一个日期,返回一个天数

        TO_DAYS(date)

4.判断某个字段的值是否包含指定的字符串

        INSTR(filed,字符串)

5.replace into  : 已有此行数据(根据主键或者唯一索引判断)替换

6.java项目中mysql jar包升级6.0 后需修改数据源配置  


     1.<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property> 
     2.url 多加时区配置 serverTimezone=GMT%2B8

发布了21 篇原创文章 · 获赞 10 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_37794901/article/details/104058627