Data-mismatch costs
An SQL statement can encounter additional costs when the data type of a column that is used in a condition differs from the definition of the column in the CREATE TABLE statement.
For example, the following query contains a condition that compares
a column to a data type value that differs from the table definition:
CREATE TABLE table1 (a integer, );
SELECT * FROM table1
WHERE a = '123';
The database server rewrites this query
before execution to convert 123
to an integer. The
SET EXPLAIN output shows the query in its adjusted format. This data
conversion has no noticeable overhead.
The additional costs of a
data mismatch are most severe when the query compares a character
column with a noncharacter value and the length of the number is not
equal to the length of the character column. For example, the following
query contains a condition in the WHERE clause that equates a character
column to an integer value because of missing quotation marks:
CREATE TABLE table2 (char_col char(3), );
SELECT * FROM table2
WHERE char_col = 1;
This query finds all of the following values that are valid for char_col:
' 1'
'001'
'1'
These
values are not necessarily clustered together in the index keys. Therefore,
the index does not provide a fast and correct way to obtain the data.
The SET EXPLAIN output shows a sequential scan for this situation.
Warning: The database server does
not use an index when the SQL statement
compares a character column with a noncharacter value that is not
equal in length to the character column.