首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么所有的非值列都被索引了,而值列却没有呢?

问为什么所有的非值列都被索引了,而值列却没有呢?
EN

Drupal用户
提问于 2012-03-21 17:40:28
回答 2查看 130关注 0票数 4

我正在改进Drupal 7网站的性能,并注意到所有的非值列(entity_type、bundle、delete等)都是索引的,但是实际的value字段没有.这对任何人来说都有意义吗?

我知道Drupal使用其他字段来连接其他表,但是搜索具有特定字段值的节点的任何视图/自定义查询都会受到影响,不是吗?

在默认情况下,值列没有被索引有什么原因吗?如果添加索引,会不会造成问题?

我想要索引的特定字段是日期字段,如果这样可以更深入地了解情况的话

EN

回答 2

Drupal用户

回答已采纳

发布于 2012-03-21 18:30:57

我不是这方面的专家,但我认为这可能是因为MySQL强制索引的最大键长度。对于InnoDB这是3500字节 ( MySQL本身进一步限制在3072字节以内)和MYISAM它是1000个字节。

是否对值列进行索引实际上是按每个字段类型进行的。例如,长文本字段类型(对于像节点体这样的字段)在fieldname_value列上没有索引,但是它在fieldname_format列上有一个索引。

fieldname_format列是一个限制为255个字符的varchar,因此不会产生太长的索引键。相反,fieldname_value列是一个longtext类型,它可能会创建一个太长的键。(您可以通过指定前缀长度来解决这个问题,但我不认为Drupal支持它)。

另一个例子是,如果您查看image (或file)字段类型的表,您会注意到fieldname_fid列上有一个索引。因为这个字段是一个整数类型,所以它自然地将自己借给索引,而不必担心索引键的最大长度。

我认为这基本上可以归结为字段存储的数据类型。entity_type/bundle/etc.都是整数列,因此您使用的任何存储引擎都可以轻松地对其进行索引,而text类型(或长度足够长的varchar类型)将创建一个索引键,该索引键太大,存储引擎无法处理。

希望这能帮点忙

票数 5
EN

Drupal用户

发布于 2012-03-22 08:26:25

为了完成Clive上面的回答,没有什么可以阻止您在任何地方添加索引,而且它肯定可以提高性能,但是要注意,它可能会适得其反。

索引可以由MySQL自动使用,即使在您不期望的情况下也是如此,因此您必须小心使用一些EXPLAIN查询,以确保您的索引在您想要的时候使用,而不是在其他时间使用。

长话短说:这是一个逐个案例的问题,这说明了为什么开发人员没有试图猜测一个人会关注什么样的性能收益。

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

https://drupal.stackexchange.com/questions/26143

复制
相关文章

相似问题

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