mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	 6e484c3bd9
			
		
	
	
	6e484c3bd9
	
	
	
		
			
			ANALYZE FORMAT=JSON output now includes table.r_engine_stats which has the engine statistics. Only non-zero members are printed. Internally: EXPLAIN data structures Explain_table_acccess and Explain_update now have handler* handler_for_stats pointer. It is used to read statistics from handler_for_stats->handler_stats. The following applies only to 10.9+, backport doesn't use it: Explain data structures exist after the tables are closed. We avoid walking invalid pointers using this: - SQL layer calls Explain_query::notify_tables_are_closed() before closing tables. - After that call, printing of JSON output is disabled. Non-JSON output can be printed but we don't access handler_for_stats when doing that.
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| create table t2(a int);
 | |
| insert into t2 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 | |
| create table t1 (
 | |
| a int not null
 | |
| ) partition by key(a);
 | |
| insert into t1 select a from t2;
 | |
| explain partitions select * from t1 where a in (2,3,4);
 | |
| id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	Extra
 | |
| 1	SIMPLE	t1	p0	ALL	NULL	NULL	NULL	NULL	10	Using where
 | |
| explain format=json select * from t1 where a in (2,3,4);
 | |
| EXPLAIN
 | |
| {
 | |
|   "query_block": {
 | |
|     "select_id": 1,
 | |
|     "table": {
 | |
|       "table_name": "t1",
 | |
|       "partitions": ["p0"],
 | |
|       "access_type": "ALL",
 | |
|       "rows": 10,
 | |
|       "filtered": 100,
 | |
|       "attached_condition": "t1.a in (2,3,4)"
 | |
|     }
 | |
|   }
 | |
| }
 | |
| analyze format=json select * from t1 where a in (2,3,4);
 | |
| ANALYZE
 | |
| {
 | |
|   "query_block": {
 | |
|     "select_id": 1,
 | |
|     "r_loops": 1,
 | |
|     "r_total_time_ms": "REPLACED",
 | |
|     "table": {
 | |
|       "table_name": "t1",
 | |
|       "partitions": ["p0"],
 | |
|       "access_type": "ALL",
 | |
|       "r_loops": 1,
 | |
|       "rows": 10,
 | |
|       "r_rows": 10,
 | |
|       "r_table_time_ms": "REPLACED",
 | |
|       "r_other_time_ms": "REPLACED",
 | |
|       "r_engine_stats": REPLACED,
 | |
|       "filtered": 100,
 | |
|       "r_filtered": 30,
 | |
|       "attached_condition": "t1.a in (2,3,4)"
 | |
|     }
 | |
|   }
 | |
| }
 | |
| analyze format=json update t1 set a=a+10 where a in (2,3,4);
 | |
| ANALYZE
 | |
| {
 | |
|   "query_block": {
 | |
|     "select_id": 1,
 | |
|     "r_total_time_ms": "REPLACED",
 | |
|     "buffer": {
 | |
|       "table": {
 | |
|         "update": 1,
 | |
|         "table_name": "t1",
 | |
|         "partitions": ["p0"],
 | |
|         "access_type": "ALL",
 | |
|         "rows": 10,
 | |
|         "r_rows": 10,
 | |
|         "r_filtered": 30,
 | |
|         "r_total_time_ms": "REPLACED",
 | |
|         "r_engine_stats": REPLACED,
 | |
|         "attached_condition": "t1.a in (2,3,4)"
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| analyze format=json delete from t1 where a in (20,30,40);
 | |
| ANALYZE
 | |
| {
 | |
|   "query_block": {
 | |
|     "select_id": 1,
 | |
|     "r_total_time_ms": "REPLACED",
 | |
|     "table": {
 | |
|       "delete": 1,
 | |
|       "table_name": "t1",
 | |
|       "partitions": ["p0"],
 | |
|       "access_type": "ALL",
 | |
|       "rows": 10,
 | |
|       "r_rows": 10,
 | |
|       "r_filtered": 0,
 | |
|       "r_total_time_ms": "REPLACED",
 | |
|       "r_engine_stats": REPLACED,
 | |
|       "attached_condition": "t1.a in (20,30,40)"
 | |
|     }
 | |
|   }
 | |
| }
 | |
| drop table t1,t2;
 |