mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 4329ec5d3b
			
		
	
	
	4329ec5d3b
	
	
	
		
			
			Introduce @@optimizer_switch flag: hash_join_cardinality When it is on, use EITS statistics to produce tighter bounds for hash join output cardinality. Amended by Monty. Reviewed by: Monty <monty@mariadb.org>
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| --source include/have_sequence.inc
 | |
| 
 | |
| # Embedded doesn't have optimizer trace:
 | |
| --source include/not_embedded.inc
 | |
| 
 | |
| create table t1 (a int, b int, c int);
 | |
| insert into t1 select seq,seq/2, seq/4 from seq_1_to_100;
 | |
| 
 | |
| create table t2 (a int, b int, c int);
 | |
| insert into t2 select seq, seq/2, seq/4 from seq_1_to_200;
 | |
| 
 | |
| analyze table t1,t2 persistent for all;
 | |
| 
 | |
| set optimizer_trace=1;
 | |
| set join_cache_level=6;
 | |
| set optimizer_switch='hash_join_cardinality=on';
 | |
| explain select *
 | |
| from t1, t2
 | |
| where t1.a=t2.a and t1.a=t2.b and t1.c=t2.c;
 | |
| 
 | |
| set @json= (select trace from information_schema.optimizer_trace);
 | |
| select json_detailed(json_extract(@json, '$**.hash_join_cardinality')) as JS;
 | |
| select json_detailed(json_extract(@json, '$**.rest_of_plan[*].rows_for_plan'))
 | |
| as ROWS_FOR_PLAN;
 | |
| 
 | |
| explain select *
 | |
| from t1, t2 where t1.c=t2.c;
 | |
| set @json= (select trace from information_schema.optimizer_trace);
 | |
| select json_detailed(json_extract(@json, '$**.hash_join_cardinality')) as JS;
 | |
| select json_detailed(json_extract(@json, '$**.rest_of_plan[*].rows_for_plan'))
 | |
| as ROWS_FOR_PLAN;
 | |
| 
 | |
| explain select *
 | |
| from t1 straight_join t2 where t1.c=t2.c and t2.a<30;
 | |
| set @json= (select trace from information_schema.optimizer_trace);
 | |
| --echo # Note that rows is the same:
 | |
| select json_detailed(json_extract(@json, '$**.hash_join_cardinality')) as JS;
 | |
| 
 | |
| --echo # Despite available selectivity:
 | |
| select json_detailed(json_extract(@json, '$**.selectivity_for_columns')) as JS;
 | |
| drop table t1,t2;
 |