Sample Header Ad - 728x90

MySQL: using NAME_CONST internally

1 vote
1 answer
98 views
I'm using MySQL 8.0.32 I have some questions about an internal conversion, that I don't understand. In addition to this, sometimes this conversion is shown in SHOW FULL PROCESSLIST, as its execution was too long. This is my table. CREATE TABLE provinces ( ID VARCHAR(2) NOT NULL COLLATE 'utf8mb4_swedish_ci', PROVINCIA VARCHAR(45) NOT NULL COLLATE 'utf8mb4_swedish_ci', PRIMARY KEY (ID) ) COLLATE='utf8mb4_swedish_ci' ENGINE=InnoDB; I have 53 rows like these ID |PROVINCIA ----|---- 01 |Álava 02 |Albacete The MySQL Function is: CREATE FUNCTION get_provincia( id_provincia VARCHAR(2) ) RETURNS varchar(45) LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE desc_provincia VARCHAR(45) DEFAULT '-'; SELECT PROVINCIA INTO desc_provincia FROM provinces WHERE ID = id_provincia; RETURN desc_provincia; END The SHOW STATUS of this function shows: - character_set_client: utf8mb4 - collation_connection: utf8mb4_0900_ai_ci - database_collation: latin1_swedish_ci That function is invoked as a field in a query. SELECT customer_id, customer_name, ..., get_provincia(SUBSTRING(zip_code,1,2))... FROM ... When I'm reviewing the execution with SHOW FULL PROCESSLIST, the query inside the function is shown like this: SELECT provincia INTO desc_provincia FROM provincias WHERE id = NAME_CONST('id_provincia',_latin1'15' COLLATE 'latin1_swedish_ci') So, I have these questions: 1. Why is the NAME_CONST forced by MySQL? 2. Does it have an impact on performance? I don't understand that very simple query shows "2" value in column "Time" of SHOW FULL PROCESSLIST command, as it takes 2 seconds. Thanks in advance.
Asked by yaki_nuka (155 rep)
Nov 6, 2024, 03:54 PM
Last activity: Nov 8, 2024, 03:28 PM