链表和序列哪个查询效率高

链表和序列哪个查询效率高,第1张

链表和序列哪个查询效率高 多表连接查询和多次单表查询哪个效率高?为什么?

如果数据量小的表,这样的设计意义不大,而且当然是单表速度快。

若在大数据量情况下,设计非常有意义。

在多表连接中注意数据的条目和外健,避免出行大量冗余数据导致性能下降。

下面我以Oracle讲讲数据查询的整个过程技术。

由于数据分布到数据块,在大量数据设计中可以将数据存储于多个数据块,在高并发进程的随机访问的情况下,能有效减少块冲突 同样的数据需要更多的数据块来存储,由于数据块的块头元信息大小固定,所以需要更多的空间来存储块头元信息。

行长度过大容易导致行连接,从而导致Oracle获取数据块的效率降低 ,在行长度固定的前提下,单块能够存储更多的数据行,也就意味着Oracle一次I/O能读取更多的数据行。

适合连续顺序读或者存放大对象数据(如LOB数据) 由于大数据块可以存放更多的索引叶节点信息,容易引起争用,所以大数据块不适合存放索引叶节点信息。

大量数据表的数据库参数设置DB_FILE_MULTIBLOCK_READ_COUNT表示Oracle一次顺序I/O读 *** 作最多能读取的数据块块数。

该参数的默认值随 *** 作系统的不同而不同。

在全表扫描或者索引快速扫描比较多的系统中(如DSS系统),建议将该值设置得较大。

但是DB_FILE_MULTIBLOCK_READ_COUNT参数受 *** 作最大单次I/O大小的限制,大多数 *** 作系统单次读 *** 作的大小不能超过1MB,这也就意味着在8KB数据块大小的情况下,该参数最大值为128。

值得一提的是,该参数的大小还会影响Oracle CBO对执行计划的评估,如果设成较大值,Oracle的执行计划倾向于全表扫描。

当该参数设置为0或者保持默认时,CBO假设全表扫描时最多能连续读取8个数据块。

从Oracle 11R2开始,DB_FILE_MULTIBLOCK_READ_COUNT的取值算法如下:db_file_multiblock_read_count = min(1048576/db_block_size , db_cache_size/(sessions * db_block_size))注意 数据库参数BLOCK_SIZE在设定之后,在数据库生命周期内不可更改。

当执行SELECT语句时,如果在内存里找不到相应的数据,就会从磁盘读取进而缓存至LRU末端(冷端),这个过程就叫物理读。

当相应数据已在内存,就会逻辑读。

我物理读是磁盘读,逻辑读是内存读;内存读的速度远比磁盘读来得快。

下面将本人大数据分区设计截图,为大家参考学习。

先贴俩图镇镇场。

引言对于内连接,使用单个查询是有意义的,因为你只获得匹配的行。

对于左连接,多个查询要好得多。

数据说话看看下面的基准测试:5个连接的单个查询查询:8.074508秒结果大小:2268000一行5个查询组合查询时间:0.00262秒结果大小:165 (6 + 50 + 7 + 12 + 90)注意,我们在两种情况下得到了相同的结果(6 x 50 x 7 x 12 x 90 = 2268000)总结一下对于冗余数据,左连接使用更多的内存。

如果只执行两个表的连接,那么内存限制可能没有那么糟糕,但通常是三个或更多的表,因此值得进行不同的查询。

写在最后用过Laravel吗?还记得 Eloquent ORM模型吗?不知道有没有注意到,debug所打印出来的多表联合查询,都是拆分为“单个表查询”,然后使用PHP处理的。

Happy coding :-)我是@程序员小助手,持续分享编程知识,欢迎关注。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/3228978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-04
下一篇 2022-10-04

发表评论

登录后才能评论

评论列表(0条)

保存