gpt4 book ai didi

mysql - 如何在具有大型 VARCHAR 字段的表上加速 SELECT 语句?

转载 作者:行者123 更新时间:2023-11-29 03:21:40 25 4
gpt4 key购买 nike

我有一个简单的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com