简略说明一下:

订单表总共有100条订单记录,需要读取这100条数据,关联商品(商品≤100)并返回。在不连表的情况下,是循环100次查100次快。还是一次性读取所有记录,然后程序匹配快。【现实里这种写法是很普遍的】

我不假思索,肯定是一次性读取所有,然后程序匹配快,最直观的就是io问题。

今天突发奇想,想总结下快在哪些地方

  1. 数据库

    理由1:因为B+的叶子节点是一个连表结构,所以遍历所有叶子节点的复杂度是O(1);
    理由2: 走索引需要回表,一次性查所有省去了回表的步骤;
    理由3: 特殊情况,可能商品数据太少,或者索引不均衡,导致mysql的优化器认为不走索引;
    理由4: 100次请求,需要100次路由和计算,经过100次的分析,优化,和执行。1次的cpu使用 < 100次的
  2. IO

    理由1: 每个tcp都有包体和包头。一次性拉取所有,包头只有一个。查询100次,包头有100个。一次性的数据包总大小 < 100次;
    理由2: 100次需要100次请求,程序很大可能是bio的;
    理由3: 本地内存读取比网络io快,且每次网络io都会把数据从内核态拷贝到用户态内存,内存按4k一页进行拷贝。一次性的 总拷贝页数一定 ≤ 100次;
    理由4: 【有点牵强】总有一群人不走寻常路,可能会出现100次的连接。。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐