| 失效链接处理 | 
| SQL变长列优化问题的介绍  PDF 下载 
	本站整理下载: 
	相关截图:  
	主要内容: 
		我们将100W数据加载到t1表中,t2表装载6000条数据。 
		执行如下sql: 
		select count(*) from t1 tr left join t2 us on tr.GenerateUserID = us.id; 
		这个结果在无任何io的前提下,执行速度为9秒。通过对比执行计划发现对于t1表的扫描时间为7秒,主要瓶颈点在这个t1的全表扫描上,而left join本身必须对左表进行全表扫描,所以这个问题主要在提升t1的扫描速度上。 
		经过分析,t1表是一个大宽表,8s本身,如果对表的数据页进行全表扫描的话会扫到很多无效页,我们发现t1表generateuserid列是有索引的,索引页和数据页分别存储不同的存储空间,因此如果我们直接扫描索引页,可以避免对无效页的扫描,进而提升查询速度。 
		同时,8s内部对于变长列的索引部分存储只是存储了一部分数据,因此全表扫描不可避免的要扫描数据页,因此,还需要将generateuserid类型修改为char(36),作为定长列来使用。 
		经过上述修改后,执行查询可以发现t1表扫描时间由7秒变为了1秒以内,完成了优化,计划如下: 
		QUERY: (OPTIMIZATION TIMESTAMP: 11-10-2021 10:12:04) 
		------ 
		select  count(*) from t1 tr left join t2 us on tr.GenerateUserID = us.id 
		Estimated Cost: 838995 
		Estimated # of Rows Returned: 1 
		Maximum Threads: 4 
		0 
		   1) gbasedbt.tr: INDEX PATH 
		    (1) Index Name: gbasedbt.idx_tblrecord_01 
		        Index Keys: generateuserid   (Key-Only)  (Serial, fragments: ALL) 
		2) gbasedbt.us: INDEX PATH 
		    (1) Index Name: gbasedbt. 101_3 
		        Index Keys: id   (Key-Only)  (Serial, fragments: ALL)DYNAMIC HASH JOIN  
		    Dynamic Hash Filters: gbasedbt.tr.generateuserid = gbasedbt.us.id  | 



 
     苏公网安备 32061202001004号
苏公网安备 32061202001004号


 
    