mysql> desc temp1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| value | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
mysql> desc temp2;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| value | text | YES | | NULL | |
+-------+------+------+-----+---------+-------+
255 - символы 'a' в каждой строке (в обеих таблицах)
mysql> select * from temp1 limit 1;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| value |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
mysql> select * from temp2 limit 1;
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| value |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Таблица запросов 1:
select count(*) from temp1 where value like '%a';
Таблица запросов 2:
select count(*) from temp2 where value like '%a';
Статистика:
No of records---temp1(varchar)---temp2(text)
2097152---------6.08(sec)--------6.91(sec)
4194304---------12.42(sec)-------13.66(sec)
8388608---------25.08(sec)-------28.03(sec)
16777216--------52.82(sec)-------56.88(sec)
33554432--------1(min)50.17(sec)-1(min)59.36(sec)
Мой вопрос: КакМожно ли объяснить разницу в скорости выполнения?
Содержимое строк в обеих таблицах одинаковое.
Как я понял, столбцы VarChar
и Text
держат содержимое offPage только тогда, когда оно превышает размер строки,Таким образом, содержимое обеих таблиц будет встроенными данными для моего page size(16kb)
.Тогда какова была причина этой разницы во времени выполнения запроса.
Примечание. Оба столбца таблицы не проиндексированы
Row Format - DYNAMIC
Collation - UTF8mb3
Character set - utf8_general_ci
Storage engine - innodb
Mysql - 5.7
Ссылочная ссылка: https://stackoverflow.com/a/48301727/5431418
Обновление: Тот же поток, что я попробовал, используя 5000 символов ('a') в обеих таблицах, разница результатов высока.
2097152---------1(min)53.63(sec)--------2(min)4.66(sec)
Обновление 2: Тот же поток, который я пытался выполнить с двумя символами ('a') в обеих таблицах, однако разница в производительности сохраняется.