MYSQL表字段type内容形如'1,2,3,4',何高速的从100万条记录中查询包含如'2或4'或其他 10

MYSQL表字段type内容形如'1,2,3,4',表中有超过100万条数据,如何写SQL查询语句,从表中快速找到type字段包含2或3或4等等,或其组合的记录。或者如何... MYSQL表字段type内容形如'1,2,3,4',表中有超过100万条数据,如何写SQL查询语句,从表中快速找到type字段包含2或3或4等等,或其组合的记录。

或者 如何优化设计表结构,能达到在1S内查询出来的
type字段设置了索引。
下面的查询时间超过了20秒,如何优化?或者 如何优化设计表结构,能达到在1S内查询出来的。
SELECT * FROM article where find_in_set('1',type)>0 or find_in_set('2',type)>0 or find_in_set('4',type)>0 limit 20
使用正则表达式的方式也是一样的。
展开
 我来答
jack_wang0823
2017-02-22 · TA获得超过2957个赞
知道大有可为答主
回答量:4143
采纳率:87%
帮助的人:1455万
展开全部
参考一下 MYSQL 的枚举类型 和set 类型...
MySql中的ENUM是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。
可以插入空字符串""和NULL:
如果你将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值。该字符串与“普通”空字符串不同,该字符串有数值值0。
如果将ENUM列声明为允许NULL,NULL值则为该列的一个有效值,并且默认值为NULL。如果ENUM列被声明为NOT NULL,其默认值为允许的值列的第1个元素。
3.4、SET类型(1)
SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。例如,指定为SET('one', 'two') NOT NULL的列可以有下面的任何值:
''
'one'
'two'
'one,two'
SET最多可以设置64个值。创建表时,SET成员值的尾部空格将自动被删除。检索时,保存在SET列的值使用列定义中所使用的大小写来显示。
MySQL用数字保存SET值,所保存值的低阶位对应第1个SET成员。如果在数值上下文中检索一个SET值,检索的值的位设置对应组成列值的SET成员。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式