我得到了一个MySql InnoDB表,其中包含一个大约有十亿行的source
字段。所有源字段值都是网址,因此它们都以http://
(无https)开头。
如果我从值中移除所有source
开头,是否会提高http://
字段的选择效果?
答案 0 :(得分:1)
这取决于。
我假设您的source
字段有索引。 MySQL中varchar字段的索引仅适用于前缀,即它们只能在搜索整个值(... where source = "some value"
)或从位置0(... WHERE source LIKE "some value%"
)开始的值的子字符串时使用。如果查询任意子串(即... WHERE source LIKE "%some value%"
),MySQL就无法使用索引。
在varchar或text列上创建索引时,您可以选择指定索引长度(KEY indexName (source(10))
)。如果这样做,索引将仅覆盖(在此示例中)URL的最左边10个字符。如果未指定索引长度,则会对整个字段值建立索引 - 这会使索引更大,但更多选择性(索引选择性是索引中不同值的数量除以总数索引值。这个比率越接近1越好。如果您使用的是TEXT或BLOB类型,则需要索引长度。现在,如果您有索引,已设置索引长度并查询URL前缀,如上所述,则是,从URL中删除“http://”将使您的索引更具选择性,从而更快。更快的速度取决于您的数据,索引长度以及索引的选择性,因此您应该对其进行测量。不过,我怀疑它最终会产生很大的不同,如果确实如此,你可能会通过修改指数来获得更多收益。
如果您不查询URL前缀或完整URL,则可能需要预处理URL以便能够创建适用于您的查询的索引。如果您根本没有索引,那么制作一个有效索引应该是您的第一个优化步骤。