我有一个简单的 ISAM 表,大约 2.2GB,有 160 万条记录。出于这个问题的目的,查询是
SELECT 'one_unindexed_field' WHERE indexed_field > constant;
该表唯一不寻常的地方是它有 1 个大的未索引列 VARCHAR(8192)。
如果 'one_unindexed_field' = 大型 VARCHAR 字段,则查询所用时间大约是对任何其他字段进行相同查询所用时间的 7 倍。对于返回的任意数量的记录(例如,1000 到 100,000),该因子的比例大致相同,因此您可以假设返回的记录集很容易装入内存。
mysql> show global status like 'created_tmp_disk_tables';
报告正在创建零个 tmp_disk_tables。 EXPLAIN
为任一查询返回相同的结果。
我怎样才能加快对该表的查询?如果不可能,有人可以解释发生了什么吗?
key_buffer_size=256M
tmp_table_size=64M
max_heap_table_size=64M
myisam_sort_buffer_size=88M
read_buffer_size=1M
read_rnd_buffer_size=2M
编辑:有一些点击表明将 ROW_FORMAT 更改为 FIXED 可能会加快我的查询速度......所以我这样做了,它实际上使查询速度稍微变慢了。
编辑:我使用的是 Win10 64 位,服务器版本:5.7.16-log MySQL Community Server (GPL)
EXPLAIN 返回这个:
mysql> EXPLAIN SELECT skw_stk_vol FROM tbl_skews WHERE (tday_date >= 42795);
id 1
select_type SIMPLE
table tbl_skews
partitions NULL
type range
possible_keys ndx_skews_tday_date
key ndx_skews_tday_date
key_len 4
ref NULL
rows 406921
filtered 100
Extra Using index condition
最佳答案
如果您想改进此查询,请尝试创建一个复合索引以避免在找到匹配行后查找表。
(indexed_field, 'one_unindexed_field')`
但问题是您没有说明该查询需要多少时间。 Brign 一个大的 varchar 字段总是比一个整数慢,因为数据会更大。
因此,如果像这样的查询有效,那么您无能为力。
SELECT `integer_unindexed_field` WHERE indexed_field > constant;
因为问题不是找到行,而是返回结果数据。
关于mysql - 如何在具有大型 VARCHAR 字段的表上加速 SELECT 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43524716/