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
Last activity: Nov 8, 2024, 03:28 PM