【发布时间】:2021-08-16 09:54:00
【问题描述】:
我正在尝试在一个有 100 万条记录的表上执行这个 SQL 查询:
SELECT * FROM enty_score limit 100;
它给我大约 600 毫秒的结果
我在字段 `dim_agg_strategy` char(255) DEFAULT NULL 上添加where 子句后,执行需要40 秒:
SELECT * FROM enty_score WHERE dim_agg_strategy='COMPOSITE_AVERAGE_LAKE' limit 100;
我尝试创建索引,但没有任何改进,执行相同的查询仍需要 40 秒:
ALTER TABLE `enty_score` ADD INDEX `dim_agg_strategy_index` (`dim_agg_strategy`);
SELECT INDEX_NAME, COLUMN_NAME, CARDINALITY, NULLABLE, INDEX_TYPE
FROM information_schema.statistics where INDEX_NAME = 'dim_agg_strategy_index';
INDEX_NAME |COLUMN_NAME |CARDINALITY|NULLABLE|INDEX_TYPE|
----------------------+----------------+-----------+--------+----------+
dim_agg_strategy_index|dim_agg_strategy| 586|YES |BTREE |
更多信息,我放在 where 子句中的这一列只包含 6 个不同的值:
select distinct dim_agg_strategy from enty_score;
dim_agg_strategy |
-------------------------+
COMPOSITE_AVERAGE |
COMPOSITE_AVERAGE_ALL |
COMPOSITE_AVERAGE_LAKE |
COMPOSITE_AVERAGE_NONLAKE|
NORMALISED_AVERAGE |
SIMPLE_AVERAGE |
【问题讨论】:
标签: mysql database indexing mariadb database-performance