mysql - 从非常大的 Mysql 数据库中获取 'text' 列字段的行

标签 mysql sql indexing query-optimization

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

select * from st_overflow_tbl where uniue_txt_id = '123456'

我运行了解释命令,发现没有对 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)

对于上述场景,我的问题是 -

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

最佳答案

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

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

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

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

关于mysql - 从非常大的 Mysql 数据库中获取 'text' 列字段的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41521728/

相关文章:

PHP序列化/反序列化错误

mysql - 搜索小于 4 个字符的字符串时,MySQL 中的 MATCH AGAINST 不显示记录

mysql - Hibernate 不创建表,尽管 hibernate.hbm2ddl.auto=create

python - SQLAlchemy 嵌套 CTE 查询

php - 如何获得所有产品? MySQL, PHP

mysql - 根据计数删除行(*)

mysql - 选择、更新并返回所选值

python - 在 python 中索引向量列表

java - 全文索引器(或缓存)如何工作?

python - 类型错误 : unhashable type: 'slice' pandas DataFrame column