【发布时间】: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字段将始终为数字(嗯,直到现在)。
【问题讨论】:
标签: mysql sql indexing query-optimization