• 优化


    一、子查询统计

    MySQL数据库也是客户端/服务端通信协议的模式,在任意时刻,无非就是要么客户端向服务端发送请求,要么服务端向客户端响应查询结果,这两个动作不能同时发生。一旦一端开始发送消息,另一端要接收完整个消息才能响应它,所以我们无法将一个请求消息切成小块独立发送,也没有办法进行流量控制

    当客户端向服务端发送sql语句时,首先客户端会把查询语句做成一个单独的数据包发送给服务端,这时如果查询语句很长则需要设置参数,如果实在太大,服务端可能会拒绝接受更多数据并抛出异常。

    同理,与之相反的是服务端从存储引擎中拿到数据后响应给客户端,这时服务端响应的数据可能会很多,无法将这些数据做成一个数据包,可能会做成多个数据包。但是当服务器响应客户端请求时,客户端必须完整的接收整个返回结果,而不能简单的只取前面几条结果,然后让服务器停止发送。因而在实际开发中,尽量保持查询简单且只返回必需的数据,减小通信间数据包的大小和数量是一个非常好的习惯,这也是查询中尽量避免使用SELECT *以及加上LIMIT限制的原因之一。

     2、查询时尽量使用limit做限制查询,原因上面已经分析,服务端可能会响应大量的数据包给客户端,我们通常只拿到前几条数据,后面的数据如果需要,则可以使用分页查询,边用边查。

      3、还有一个误区就是,当我们在设计表结构时,尽量将字段的数据类型设置到最小,够用就行,别瞻前顾后,就拿int类型来说吧,我们习惯将给int类型的字段设置长度,其实吧,你设置不设置都没什么卵用,int类型是采用16位存储空间,那么它的存储范围就已经确定,所以int(1)和int(20)对于存储和计算是相同的,大家改改吧,我也是刚学到的。

      4、我们在查询数据库,可能会用多个范围条件来作限制,比如查询某一时间段内入职的某一年龄段的员工,此时需要接纳的一点是,MySQL无法同时使用俩个字段的索引,它只会选择一种的一个字段的索引来做查询。

      5、建议大家经常把表中一些不常用的索引删掉,定期删除一些长时间未使用过的索引是一个非常好的习惯。(在这儿给大家嘱咐一下,不要认为索引就是查询最好的工具,如果有时候查询非常小的表时,建议不要建立索引,直接全表扫描效果会更好)。

  • 相关阅读:
    [LeetCode] Permutation Sequence, Solution
    [LeetCode] Spiral Matrix II, Solution
    同学你好, google到你的帖子,想问下为什么你的解法不用考虑到2个数相同的情况?比如4,4,8...
    [LeetCode] Regular Expression Matching, Solution
    {4,4,8}倒还好,不过{4,8}就会有问题了。这里倒是一个bug。一个可用的办法就是用一个vis...
    [LeetCode] Merge Intervals, Solution
    请问这个解法的时间复杂度怎么分析?谢谢!
    未做题
    dude, visited[i 1] == 0 should be visited[i 1]...
    发布一个开源的c++网络事件库【转载Zark@cppthinker.com】
  • 原文地址:https://www.cnblogs.com/lilirufeng/p/6894991.html
Copyright © 2020-2023  润新知