In the MySQL team, we have been refactoring the SQL parser to be more maintainable. Gleb Shchepa lists the goals of this project in more details on the MySQL Server Team blog.
As part of this, we have identified the feature PROCEDURE ANALYSE as something that we would like to deprecate. For added context, here is a demonstration:
mysql> SELECT * FROM City procedure analyse()\G *************************** 1. row *************************** Field_name: world.city.ID Min_value: 1 Max_value: 4079 Min_length: 1 Max_length: 4 Empties_or_zeros: 0 Nulls: 0 Avg_value_or_avg_length: 2040.0000 Std: 1177.5058 Optimal_fieldtype: SMALLINT(4) UNSIGNED NOT NULL *************************** 2. row *************************** Field_name: world.city.Name Min_value: A Coruña (La Coruña) Max_value: ´s-Hertogenbosch Min_length: 3 Max_length: 33 Empties_or_zeros: 0 Nulls: 0 Avg_value_or_avg_length: 8.5295 Std: NULL Optimal_fieldtype: VARCHAR(33) NOT NULL *************************** 3. row *************************** Field_name: world.city.CountryCode Min_value: ABW Max_value: ZWE Min_length: 3 Max_length: 3 Empties_or_zeros: 0 Nulls: 0 Avg_value_or_avg_length: 3.0000 Std: NULL Optimal_fieldtype: ENUM('ABW','AFG','AGO','AIA','ALB','AND','ANT','ARE','ARG','ARM','ASM','ATG','AUS','AUT','AZE','BDI','BEL','BEN','BFA','BGD','BGR','BHR','BHS','BIH','BLR','BLZ','BMU','BOL','BRA','BRB','BRN','BTN','BWA','CAF','CAN','CCK','CHE','CHL','CHN','CIV','CMR','COD','COG','COK','COL','COM','CPV','CRI','CUB','CXR','CYM','CYP','CZE','DEU','DJI','DMA','DNK','DOM','DZA','ECU','EGY','ERI','ESH','ESP','EST','ETH','FIN','FJI','FLK','FRA','FRO','FSM','GAB','GBR','GEO','GHA','GIB','GIN','GLP','GMB','GNB','GNQ','GRC','GRD','GRL','GTM','GUF','GUM','GUY','HKG','HND','HRV','HTI','HUN','IDN','IND','IRL','IRN','IRQ','ISL','ISR','ITA','JAM','JOR','JPN','KAZ','KEN','KGZ','KHM','KIR','KNA','KOR','KWT','LAO','LBN','LBR','LBY','LCA','LIE','LKA','LSO','LTU','LUX','LVA','MAC','MAR','MCO','MDA','MDG','MDV','MEX','MHL','MKD','MLI','MLT','MMR','MNG','MNP','MOZ','MRT','MSR','MTQ','MUS','MWI','MYS','MYT','NAM','NCL','NER','NFK','NGA','NIC','NIU','NLD','NOR','NPL','NRU','NZL','OMN','PAK','PAN','PCN','PER','PHL','PLW','PNG','POL','PRI','PRK','PRT','PRY','PSE','PYF','QAT','REU','ROM','RUS','RWA','SAU','SDN','SEN','SGP','SHN','SJM','SLB','SLE','SLV','SMR','SOM','SPM','STP','SUR','SVK','SVN','SWE','SWZ','SYC','SYR','TCA','TCD','TGO','THA','TJK','TKL','TKM','TMP','TON','TTO','TUN','TUR','TUV','TWN','TZA','UGA','UKR','URY','USA','UZB','VAT','VCT','VEN','VGB','VIR','VNM','VUT','WLF','WSM','YEM','YUG','ZAF','ZMB','ZWE') NOT NULL *************************** 4. row *************************** Field_name: world.city.District Min_value: Abhasia [Aphazeti] Max_value: – Min_length: 1 Max_length: 20 Empties_or_zeros: 4 Nulls: 0 Avg_value_or_avg_length: 9.0194 Std: NULL Optimal_fieldtype: VARCHAR(20) NOT NULL *************************** 5. row *************************** Field_name: world.city.Population Min_value: 42 Max_value: 10500000 Min_length: 2 Max_length: 8 Empties_or_zeros: 0 Nulls: 0 Avg_value_or_avg_length: 350468.2236 Std: 723686.9870 Optimal_fieldtype: MEDIUMINT(8) UNSIGNED NOT NULL 5 rows in set (0.01 sec)
ANALYSE() examines the result from a query and returns an analysis of the results that suggests optimal data types for each column that may help reduce table sizes.
Our justification for wanting to deprecate PROCEDURE ANALYSE is as follows:
- There are no other uses of SELECT * FROM table PROCEDURE. This syntax is used exclusively by ANALYSE, and uses the UK English spelling.
- The name PROCEDURE predates the addition of stored procedures as a MySQL feature. Ideally this feature would use a different name (CHANNEL?) to avoid confusion in usage. It also exists as an extension to the SQL standard.
- There are numerous advantages to a feature similar to this being external to the MySQL server. The server must follow a stable release cycle, with core functionality being unchanged once it is declared GA. As an external tool, it is much easier to develop in an agile way, and provide new functionality without having to provide the same level of backward compatibility.
By “external” I am implying that this could either be a script or as a view or stored procedure in MySQL. Shlomi has a good example of how to show auto_increment column capacity in common_schema!
Our current plan is to deprecate PROCEDURE ANALYSE in MySQL 5.7, for removal as soon as MySQL 5.8. We are inviting feedback from the MySQL Community and would like to hear from you if you use PROCEDURE ANALYSE. Please leave a comment, or get in touch!