mysql 优化规则,max() count() , limit 等优化,索引的优化,添加自增长的规则

本文介绍SQL查询优化的方法,包括使用索引提升查询速度、通过不同LIMIT语法减少扫描行数、利用BETWEEN替代大量OFFSET以及使用UNION代替OR提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 查出一张表里的最大的那个时间:SELECT MAX(u.createtime)  FROM who_user_function u

  加 索引前:

   

   给createtime  加索引后: 

  

2 .  查询 users 表里面的 电话 1524459790 和 13639394862 各出现了多少次 : 

    SELECT COUNT(tel='18294459790' OR NULL ) AS self,COUNT(tel='13639394862' OR NULL ) AS other FROM users  u;

    

3  如果who_user_function 中有40多万条数据,要查出 30万条之后的600条数据,并且其中表里面只有 id  一个主键索引,再没有其他的索引,全表扫描,查询情况如下:

    1>> 没有加order by  id 的情况下:SELECT w.id ,w.createtime FROM  who_user_function w  LIMIT 300000,600 ; 

    

    2 >> 加了 order by id 的情况下:SELECT w.id ,w.createtime FROM  who_user_function w order by id  LIMIT 300000,600 ;  使用了主键 id 索引,稍微比上面快点

     

  4. 如何修改一个表里面的某一个字段为自增长:

      情景: 给有数据(40万条数据)的 who_user_function 表里面加上 auto_index 字段 ,并且使该字段为自增长 的做法如下:

     1>>     添加 auto_index 字段,并且设置为主键,

     2>>     给 auto_index 添加索引  alter  table  who_user_function add index  auto_index(`auto_index`);

     3>>      修改 auto_index 字段为自增长之后,然后who_user_function 表里面的auto_index 字段就会有值,并且都是自增长的

  5 . limit  的优化规则:

     情景:如何查出 who_user_function 中的1000 到1500 之间的500条数据, 查法如下:

     方法一:>> EXPLAIN SELECT * FROM  who_user_function w LIMIT 1000,500; 

                1) 扫描 385937 行,没有加order by auto_index 

                2)图表:

              

     方法二:>> EXPLAIN   SELECT  * FROM who_user_function w ORDER BY  w.auto_index LIMIT 1000,500;

              1) 扫描1500行,加了order by auto_index

              2)  图表:

        

    方法三:>> EXPLAIN  SELECT w.* FROM who_user_function w WHERE w.auto_index >=1000 AND w.auto_index <= 1500                          ORDER BY  w.auto_index   LIMIT 0,500;

                 1)   扫描500行 加了 order by auto_index,还加了where 过滤条件

                 2) 图表:

     

           总结: 很显然方法三 是最优的选择,只查询了500 条,并且 用了 索引 auto_index ,type 方式也是 range 

   6 ,索引在优化sql时是非常重要的,适当的使用索引,能起到很大的作用 一般在 where 条件,group by,  order by  后面使                 用索引优化

   8. limit 的其他的优化规则,limit 的基数比较大时使用 between   如:

      1)优化前

           select * from admin order by admin_id limit 100000,10

      2)优化后

            select * from admin where admin_id between 100000 and 100010 order by admin_id。

   9.  sql 优化  or  和  union 及 unionall  的优化,区别
        union 将两个结果集进行追加,需要两个结果集的列数应该是相关的
并且相应列的数据类型也应该相当的 ,一般情况

       下,用union 代替where 字句中的or 效果会好点,但是前提是字段必须加了索引,对索引列使用OR将造成全表扫描,如果          该字段没有加索引,则使用union 则可能还没有or的效率高呢。。

   10. 给一个表里添加一个字段并且设置为自增长步骤:

       A. 先删除现有的主键  ALTER TABLE cash_users DROP PRIMARY KEY;

       B. 然后填加想添加的这个字段 ALTER TABLE cash_users ADD auto INT(10)  NOT NULL COMMENT '自增长';

       C. 设置刚添加的这个字段为主键自增长 ALTER TABLE cash_users MODIFY `auto` INT  AUTO_INCREMENT PRIMARY KEY ;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值