首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在列的子字符串上创建索引?

如何在列的子字符串上创建索引?
EN

Stack Overflow用户
提问于 2020-12-02 17:16:48
回答 2查看 1.7K关注 0票数 0

我有一个包含键值对的表,我想成为ale,以便有效地搜索:

代码语言:javascript
复制
SELECT * WHERE meta_key = "User ID" AND meta_value = "123userId";

但是,由于遗留需求,键和值NVARCHAR存储可能分别高达255个字符和1000个字符。在这样大的列上索引不仅代价很高,而且对某些db类型也有明显的限制。

我相信MySQL有一个允许LEFT-style子字符串索引的系统,如下所示:

代码语言:javascript
复制
CREATE INDEX ix_metadata_indexing_key_value ON metadata_indexing(meta_key, meta_value(255));

...however我们的系统必须支持MySQL、MSSQL和Oracle三种语言。这是正确的方法吗?如果是的话,我如何在MSSQL和Oracle上建立类似的索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-15 18:02:28

正如@Larnu建议的那样,我们最终得到了一个新的计算meta_value_short列,需要为每个db类型分别生成该列。当询问时..。

如果长度小于或等于255,则为meta_value_short相比。

否则:首先将LEFT(value, 255)meta_value_short进行比较,然后再与meta_value进行额外比较。

作为参考,计算的列定义如下:

MSSQL: ALTER TABLE [metadata_indexing] ADD meta_value_short AS (SUBSTRING(meta_value, 1, 255))

MySQL: ALTER TABLE metadata_indexing ADD meta_value_short VARCHAR(255) AS (SUBSTRING(meta_value, 1, 255));

甲骨文: ALTER TABLE metadata_indexing ADD meta_value_short AS (SUBSTR(meta_value, 1, 255));

票数 0
EN

Stack Overflow用户

发布于 2020-12-02 23:11:48

如果您是在谈论WordPress,那么该索引只是解决方案的一部分。当深入到postmeta时,您需要一个以post_id开头的复合键。更多建议。

此外,如果数据足够可预测,您可能可以替换LONGTEXT将更文明的东西,如VARCHAR(150)。做SELECT MAX(LENGTH(meta_key)), MAX(LENGTH(meta_value)) FROM post_meta;

(我也是,潘伊夫。尤其是WP的实施不力。)

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

https://stackoverflow.com/questions/65112973

复制
相关文章

相似问题

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