从非常大的 Mysql 数据库中获取“文本”列字段的行

Posted

技术标签:

【中文标题】从非常大的 Mysql 数据库中获取“文本”列字段的行【英文标题】:Fetching row wrt a 'text' column field from a very large Mysql DB 【发布时间】:2017-01-07 13:02:47 【问题描述】:

我有一个用例,我必须从一个大表(包含数百万个条目)中获取数据(行),并在“文本”列字段上使用过滤器。问题出在正常迭代中,此表上的简单查询超时。

select * from st_overflow_tbl where uniue_txt_id = '123456'

我运行了explain 命令,发现unique_txt_id 上没有索引。输出如下。

"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
1,"SIMPLE","st_overflow_tbl","ALL",NULL,NULL,NULL,NULL,12063881,"Using where"

然后,我尝试为该表创建索引,但失败并显示以下错误消息 -

BLOB/TEXT column 'uniue_txt_id' used in key specification without a key length

我正在运行的命令是这个 -

alter table st_overflow_tbl add index uti_idx (uniue_txt_id)

对于上面提到的场景,我的问题是 -

    有没有更好的方法(不仅仅是在表上创建索引) 获取我们在非常大的表格上搜索“文本”字段的数据。 如何在这个表上创建索引?我做错了什么? 更具体到我的用例。如果我无法在此表上创建索引。我仍然可以使用相同的选择查询(如上所述)从该表中快速获取数据吗?假设unique_txt_id 字段将始终为数字(嗯,直到现在)。

【问题讨论】:

【参考方案1】:

如果该列只有几个字符,则将该列更改为适当的类型,例如varchar(32)

如果不想这样做,可以指定索引的初始长度:

alter table st_overflow_tbl add index uti_idx (uniue_txt_id(32))

最后,如果它确实是包含单词等的文本列,那么您可以研究全文索引。

【讨论】:

接受您的回答,因为它有助于解决索引查询中的问题。但是,现在的问题是这个用于索引的更改查询正在超时。我没有使用任何 UI 工具,它的简单终端。我如何确保服务器不会重置连接?我没有 sql server 的访问权限。 @ManishShukla 。 . .桌子有多大? 大约 500 万个条目。 (不要在解释命令中去 12063881 数字。实数已更改。)

以上是关于从非常大的 Mysql 数据库中获取“文本”列字段的行的主要内容,如果未能解决你的问题,请参考以下文章

从非常大的表中导出逗号分隔的数据

如何从 PHP 中的 mySQL 数据库中获取所有列字段的一行?

从 MySQL 数据库中检索文本 [重复]

从 SQL 获取数据并将其插入到 Java 文本字段中

ZF2中获取mysql表字段名

mysql建立索引的一些小规则