首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列varchar和有关索引或全文的问题?

列varchar和有关索引或全文的问题?
EN

Stack Overflow用户
提问于 2016-06-15 14:00:05
回答 2查看 91关注 0票数 1

我的表上有一个用于密码的列varchar,在一些脚本中,我会进行如下查询:

length(column_varchar) < 10

我的问题是,如果我在这个专栏上加一个索引,它会有帮助吗?或者在这种情况下应该使用全文?还是不需要索引?

另一个问题,我需要在所有列中使用索引,这些列将在“哪里”中使用?

谢谢你的进阶。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-15 14:15:51

索引用于索引内容(字段值),而不是字段的长度,因此没有索引可以帮助进行上述查询。(注:您可以有一个稀疏字段,其内容长度和索引可以分隔字段。)此外,密码应该以散列格式存储,所以所有密码长度都应该相同,或者至少不应该是选择的标准。

不,不应对将在where标准中使用的所有列进行索引。最优指标结构的选择是一个复杂而又非常广泛的课题。在试图确定要索引的字段(或字段的组合)时,请始终考虑以下要点:

  1. 索引加快了选择,但减慢了数据修改的速度,因为您还必须更新索引,而不仅仅是列的值。
  2. MySQL只能在一个查询中使用每个表的一个索引。
  3. MySQL使用索引的选择性来确定要使用的索引。一个只能有两个值的字段(是/否,真/假)没有足够的选择性,所以不要用索引来麻烦自己。
  4. 始终使用explain命令检查查询使用的索引。
票数 2
EN

Stack Overflow用户

发布于 2016-06-15 14:24:09

这里有两个问题,一般来说,你应该把问题分开。

无论如何,第一个“它将有助于索引一个列,您在其中做一个长度测试。”

不,它不会。您在这里提高性能的唯一方法是增加一个列,该列保存column_varchar中值的长度,并对其进行索引。

您在评论中写道,您持有哈希,所以长度将是相同的,所以我不得不猜测有些密码是空的,所以您没有散列,或者您正在从非散列迁移到散列。

第二个问题:是否应该对where子句中的所有字段进行索引。这不是一个自动的是,这就是为什么有关于查询优化的书籍。

这取决于从索引中得到多少好处,这取决于数据的性质。

主要的折衷是插入速度和查询速度。索引会减慢插入速度并加快查询速度。

接下来要考虑的是选择性。例如,如果索引的值只有三个潜在值,数据库将需要频繁更新索引才能从中获得实际值。

在这种特殊情况下,您拥有均匀分布的数据(因为它是散列的),您有很大的选择性( MD5很少有冲突),并且您期望使用单个术语进行更频繁的查询,所以您肯定应该对本专栏进行索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37837665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档