我的表上有一个用于密码的列varchar,在一些脚本中,我会进行如下查询:
length(column_varchar) < 10
我的问题是,如果我在这个专栏上加一个索引,它会有帮助吗?或者在这种情况下应该使用全文?还是不需要索引?
另一个问题,我需要在所有列中使用索引,这些列将在“哪里”中使用?
谢谢你的进阶。
发布于 2016-06-15 14:15:51
索引用于索引内容(字段值),而不是字段的长度,因此没有索引可以帮助进行上述查询。(注:您可以有一个稀疏字段,其内容长度和索引可以分隔字段。)此外,密码应该以散列格式存储,所以所有密码长度都应该相同,或者至少不应该是选择的标准。
不,不应对将在where标准中使用的所有列进行索引。最优指标结构的选择是一个复杂而又非常广泛的课题。在试图确定要索引的字段(或字段的组合)时,请始终考虑以下要点:
explain命令检查查询使用的索引。发布于 2016-06-15 14:24:09
这里有两个问题,一般来说,你应该把问题分开。
无论如何,第一个“它将有助于索引一个列,您在其中做一个长度测试。”
不,它不会。您在这里提高性能的唯一方法是增加一个列,该列保存column_varchar中值的长度,并对其进行索引。
您在评论中写道,您持有哈希,所以长度将是相同的,所以我不得不猜测有些密码是空的,所以您没有散列,或者您正在从非散列迁移到散列。
第二个问题:是否应该对where子句中的所有字段进行索引。这不是一个自动的是,这就是为什么有关于查询优化的书籍。
这取决于从索引中得到多少好处,这取决于数据的性质。
主要的折衷是插入速度和查询速度。索引会减慢插入速度并加快查询速度。
接下来要考虑的是选择性。例如,如果索引的值只有三个潜在值,数据库将需要频繁更新索引才能从中获得实际值。
在这种特殊情况下,您拥有均匀分布的数据(因为它是散列的),您有很大的选择性( MD5很少有冲突),并且您期望使用单个术语进行更频繁的查询,所以您肯定应该对本专栏进行索引。
https://stackoverflow.com/questions/37837665
复制相似问题