Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql索引表中的固定预提交字符串是否会导致性能问题?_Mysql_Database_Optimization_Indexing_Query Optimization - Fatal编程技术网

MySql索引表中的固定预提交字符串是否会导致性能问题?

MySql索引表中的固定预提交字符串是否会导致性能问题?,mysql,database,optimization,indexing,query-optimization,Mysql,Database,Optimization,Indexing,Query Optimization,我得到了一个MySql InnoDB表,其中包含一个source字段,大约有10亿行。所有源字段值都是URL,因此它们都以http://(无https)开头 如果我从值中删除所有http://start,是否会提高source字段的选择性能?这取决于 我假设您在源字段上有一个索引。MySQL中varchar字段上的索引只对前缀起作用,也就是说,它们只能在搜索整个值(…where source=“some value”)或从位置0开始的值的子字符串(…where source LIKE“some

我得到了一个MySql InnoDB表,其中包含一个
source
字段,大约有10亿行。所有源字段值都是URL,因此它们都以http://(无https)开头

如果我从值中删除所有
http://
start,是否会提高
source
字段的选择性能?

这取决于

我假设您在
字段上有一个索引。MySQL中varchar字段上的索引只对前缀起作用,也就是说,它们只能在搜索整个值(
…where source=“some value”
)或从位置0开始的值的子字符串(
…where source LIKE“some value%”
)时使用。如果查询任意子字符串(例如,
…其中源代码为“%some value%”
),MySQL将无法使用索引

在varchar或text列上创建索引时,可以选择指定索引长度(
KEY indexName(source(10))
)。如果这样做,索引将只覆盖(在本例中)URL最左边的10个字符。如果不指定索引长度,则整个字段值将被索引-这会使索引更大,但更具选择性(索引选择性是索引中不同值的数量除以索引值的总数。此比率越接近1,效果越好)。如果您使用的是文本或BLOB类型,则需要索引长度。现在,如果您有一个索引,设置了一个索引长度并按照上面所述查询URL前缀,那么是的,从URL中删除“http://”将使您的索引更具选择性,从而更快。速度有多快取决于您的数据、索引长度以及索引的选择性有多高,因此您应该真正测量它。不过,我怀疑它最终是否会产生很大的影响,如果真的如此,你可能会通过修改索引获得更多

如果不查询URL前缀或完整URL,则可能需要预处理URL,以便能够创建与查询一起使用的索引。如果你根本没有索引,那么制定一个有效的索引应该是你优化的第一步