打字猴:1.70050945e+09
1700509450 当数据库的SQL解释器拿到这个谓词之后,由于无法通过B-TREE树的二分查找原理避开相应的数据块,因此只能进行穷举查找,这时索引将会失效。
1700509451
1700509452 3.QUBE模型
1700509453
1700509454 如果在扫描时,结果集中的数据量在整个扫描数据集中占比非常小,就表示索引的效果非常好,反之,索引速度就会变慢。这是为什么呢?熟悉Oracle的朋友应该知道,Oracle的SQL策略优化是基于一个叫作“CBO模型”(Cost-Based Optimizer)的东西。CBO模型从中文直译的角度看就是一种基于成本(Cost)的优化器,这个成本是指访问成本。有一个与CBO模型近似的成本评估模型叫作“QUBE模型”(Quick Upper-Bound Estimation)。这个模型很简洁,也便于我们研究和评估。
1700509455
1700509456 QUBE模型有几个重要的公式:
1700509457
1700509458
1700509459
1700509460
1700509461 其中,“LRT”代表“Local response time”,“TR”代表“Number of random touches”,“TS”代表“Number of sequential touches”,“F”代表“Number of successful FETCHes”。
1700509462
1700509463 这个公式的含义是:
1700509464
1700509465 响应时间=随机读的次数×10ms+顺序读的次数×0.01ms+处理的记录数×0.1ms
1700509466
1700509467 在这个模型中有一个假设,就是一次随机读取时间大约为10ms。这10ms是怎么估算出来的呢?以SCSI硬盘为例,转速为10000~15000rpm,则每秒转动167~250圈,平均每圈耗时4~6ms。除了转动消耗的4~6ms外,还有排队时间、传输时间。计算可知,共计约10ms完成一次完整的访问。每次每条记录的读取耗时0.01ms,这个假设的前提是磁盘带宽为40MB/s,一个数据块(4KB)上平均存放10条记录。每条记录的传输时间是
1700509468
1700509469
1700509470
1700509471
1700509472 因此,有如下推论。
1700509473
1700509474 假设索引的选择率(Selectivity)是s,表中的记录数是N,按照QUBE模型会得到
1700509475
1700509476
1700509477
1700509478
1700509479 单位都是ms。
1700509480
1700509481 经过计算,当s < 0.001时,使用索引的时间才会小于全表扫描的时间(因为索引访问本身也有成本)。在工程实践中,结合使用缓存等诸多因素,s通常会取到10%~20%。如果s再大一些,就建议使用全表扫描。在这个讨论中有特殊的数值假设,在实际应用中会使用指标不同的硬件设备,所以会对s临界值的估算会有一定影响。在这里,我们只讨论考虑问题的思路,具体的场景要在具体的环境中测算和推定,切莫刻舟求剑。
1700509482
1700509483
1700509484
1700509485
1700509486 数据科学家养成手册 [:1700503628]
1700509487 数据科学家养成手册 13.6 稳定最重要
1700509488
1700509489 在存储这个层面来说,稳定是非常关键的。这里说的稳定不是指物理层面的硬件不要损坏或者发生其他故障,而是指读写性能方面的稳恒。
1700509490
1700509491 不论支持任何种业务,通常我们都希望完成单项任务的时间是以时间μ为平均值,以尽可能小的值σ为方差的正态分布(如图13-11和图13-12所示)。
1700509492
1700509493
1700509494
1700509495   图13-11 μ=10, σ=2的正态分布     图13-12 μ=10, σ=0.8的正态分布   一次标准读写的完成时间,第二种情况通常要比第一种情况理想。我们都有这样的体会:在一次任务中,如果每次完成的时间都稳定在一个值附近,体验就会显得非常平稳。这种稳定的时间长度由于预期性很好,所以可以基于它去做各种相关任务时间的估算——这些时间的估算值也是稳定且可靠的。例如,使用B-TREE树索引对表中的非重字段查找进行加速时,时间复杂度为O(log n),从“根”到任何一片“叶子”所花费的时间非常稳定。但是,如果不使用这种方式(例如直接使用顺序查找),麻烦就大了。
1700509496
1700509497
1700509498 在不使用索引进行顺序查找的情况下,在对非重字段进行查找时,由于任何一条数据成为被选中数据的概率相同,所以查找的时间复杂度就是O(n),平均每次理论查找次数为。然而,每个样本被查找时所花费的时间迥异,第1个样本被查找到的时间为1,第2个为2,第n个为n。查找时间统计模型方差为
1700509499
[ 上一页 ]  [ :1.70050945e+09 ]  [ 下一页 ]