java - 索引 SQL 数据库表时 TEXT 类型的问题
问题描述
我正在做一个项目,我们的团队在我们的数据库中确实有许多静态表。我想在这些表上创建索引以提高性能。不幸的是,我收到了错误:
错误代码:1170。在没有密钥长度的密钥规范中使用了 BLOB/TEXT 列“描述”
提到的“描述”列被定义为 MEDIUMTEXT。
我发现无法索引 TEXT 类型,并希望将所有不必要的 TEXT 类型更改为 VARCHAR(255) 并在此之后应用 SQL 索引。
我们使用的大多数 SQL 语句都请求表的所有属性。在我们最重要的表(关于索引)中,只有一个属性需要保留为 MEDIUMTEXT。但是我们总是获取整行(包括 MEDIUMTEXT 描述)。
所以我的问题是:由于我无法将特定的 MEDIUMTEXT 更改为 VARCHAR:我应该放弃对该表的索引吗?如果我在 MEDIUMTEXT 的情况下索引每个属性,我是否会获得性能提升?
提前致谢...
解决方案
以下是在 MEDIUMTEXT 字段上创建 INDEX 的方法:
CREATE TABLE textindexexample(
name MEDIUMTEXT,
INDEX(name(255))
);
如果你需要一个 KEY 也是一样的。在现有表上,您可以像这样添加它:
CREATE INDEX idx ON textindexexample(name(255));
请注意,我只索引了前 255 个字符。这意味着如果两个不同的文本以相同的字符序列开头,它们将被索引威胁为相等。索引大小的限制是 3072 字节。所以在常规 ascii 字符集上不超过 name(3072) 。
关于第二个问题:不,如果您索引所有内容,您将不会获得性能提升。它实际上是相反的 - 性能可能会降低,因为需要维护索引(添加数据后立即更新)。
您应该只索引您使用的列。例如,您在 WHERE 和 JOIN 中使用的字段。
推荐阅读
- php - 使用 php 和 axios 反应本机连接到本地数据库
- typescript - 如何在没有类型定义的情况下定义泛型“具有属性”约束?
- java - 我的记录器没有使用 Spring 创建 RollingFile(使用 logback.xml 配置)
- python - 用几何图形的联合替换地理数据框中的几何图形
- python - 需要在哪里连接到数据库?
- keras - 在 LSTM 中将静态特征与时间数据相结合
- .net - VB.NET - ShowInTaskBar 不适用于主题
- python - 沿曲线复制 nurbs 曲线以执行放样
- datetime - 在 Xamarin 表单中将 HijriCalendar 转换为公历
- python - python中的mysql.connector不工作显示没有名为'mysql'的模块