从一个非常大的Mysql DB获取一行'text'列字段

时间:2017-01-07 13:02:48

标签: mysql sql indexing query-optimization

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

TypeError: $scope.users.$remove is not a function

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

select * from st_overflow_tbl where uniue_txt_id = '123456'

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

"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

上面提到的场景我有的问题是 -

  1. 有没有更好的方法(而不仅仅是在桌面上创建索引)     获取我们在非常大的表上搜索“文本”字段的数据。
  2. 如何在此表上创建索引?我做错了什么?
  3. 更具体到我的用例。如果我无法在此表上创建索引。我仍然能够使用相同的选择查询(如上所述)从此表中快速获取数据吗?让我们说alter table st_overflow_tbl add index uti_idx (uniue_txt_id) 字段将始终为数字(嗯,直到现在)。

1 个答案:

答案 0 :(得分:1)

如果列只有少数几个字符,请将列更改为适当的类型,例如public class ApplicationRoleManager : RoleManager<ApplicationRole, Guid> { public ApplicationRoleManager(IRoleStore<ApplicationRole, Guid> store) : base(store) { } }

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

varchar(32)

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