V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
LeeReamond
V2EX  ›  问与答

数据库单表查询速度慢的瓶颈在哪里?

  •  
  •   LeeReamond · 2021-04-13 09:31:52 +08:00 · 1626 次点击
    这是一个创建于 1332 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,不知道是否可以脱离开具体数据库实现,单纯讨论一下基础理论方面的问题。

    大家都知道数据库内单表比较大的话需要优化,比如使用 mysql 数据库,举例来说如果有一个五千万行的表,即使使用一个特别单纯的模型,比如每行只存自增主键 + 一个 char10 类型的数据,使用主键搜索 char10,这种情况下因为是主键,所以搜索应该不需要遍历,能直接通过索引确定位置。

    但实际执行下,在未分区情况下速度也不会特别快,一般来说比如这个搜索会耗时几秒到十几秒不等的时间。这让我好奇为什么数据库搜索缓慢,其瓶颈在哪里。理论上来说不是只需要计算出位置,然后再去硬盘指定位置取出数据不就可以了么。即使硬盘很慢,读取一个随机位置的数据也不需要几秒到十几秒不等吧。

    9 条回复    2021-04-13 11:26:42 +08:00
    arvinsilm
        1
    arvinsilm  
       2021-04-13 09:41:42 +08:00
    因为不是“计算”出位置,而是“查找”到位置。简单了解一下 mysql 底层存储结构就知道了。
    你说的这种应该用 KV 数据库,在知道 Key 的情况下,可以迅速获取到值。
    chihiro2014
        2
    chihiro2014  
       2021-04-13 09:50:37 +08:00
    这个你得看数据库查找数据的方式了,建议看下索引那一块
    cheng6563
        3
    cheng6563  
       2021-04-13 09:54:01 +08:00
    位置不是算出来的,是“试”出来的,数据多了就试得多。不过你耗时几十秒也不正常。
    wanguorui123
        4
    wanguorui123  
       2021-04-13 09:55:27 +08:00
    1 、不同索引算法的性能
    2 、内存数据库缓存的大小
    3 、硬盘 IO 的 4K 性能
    4 、网络延迟
    5 、CPU 的运算速度
    timethinker
        5
    timethinker  
       2021-04-13 10:00:44 +08:00
    这里面涉及到太多的内容了,楼主如果实在想要了解的话推荐一本书《数据密集型应用系统设计》。书本身的内容简单易懂,并且引用了大量的文献资料以便深入阅读。
    xsm1890
        6
    xsm1890  
       2021-04-13 10:32:54 +08:00
    1.mysql 数据库也有很多种存储引擎,不知道你说的是哪一种
    2.拿最常用的 innodb 来说,即使表中有五亿数据,正常情况下,主键查找都是非常快的;你这里几秒到十几秒是非常不正常的。
    3.innodb 内部查找类似于二叉查找,时间复杂度 O(logN);对于主键单条查找,分区并不会有显著的影响。
    4.有一种情况下按照主键查找可能出现你说的几秒或者几十秒的情况:同时在一个查询里查找多条(如一千或者更多)随机无序的主键 id ;此时 CBO 的优化器认为多次的随机读代价太大,会选择全表扫描,才有可能出现主键查找 性能低下的问题。
    opengps
        7
    opengps  
       2021-04-13 10:41:25 +08:00
    主要查执行过程,看看是不是没走索引
    另外对于查询需求,还是尽量避免大表查询的好
    securityCoding
        8
    securityCoding  
       2021-04-13 11:14:55 +08:00 via Android
    你磁盘的 io 压力比较大吧,不然不会这么不稳定
    Justin13
        9
    Justin13  
       2021-04-13 11:26:42 +08:00 via Android
    把 SQL 写出来啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:11 · PVG 10:11 · LAX 18:11 · JFK 21:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.