今天肚腩群里,有个兄弟问,一个表数据如下:
name apptype
A 1,3,4
B 2, 3
C 1, 4
查询apptype包含3的name不用LIKE该如何做?
肚腩问其为何不用LIKE,日:LIKE会全表,性能不行。
这样的表设计存在如下问题:
1. 如果APPTYPE增加到11,那么用like会将1类型也选上,所以那兄弟说用了 concat在前后加上逗号,再LIKE数值和逗号。这样字段数据都变了,怎么建索引也没用了
2. 如果以后增加类型或者减少类型,操作会很麻烦
3. 如那个兄弟所说,这样做性能太低。
。。。
肚腩想起貌似以前也见开发这样干过,比如一个用户买了几款产品。
肚腩推荐一种方法:
使用数值 0 1 2 4 这些代表类型。如果是多种类型,则相加。
类似于LINUX的权限设计,这样不但用得上索引,而且查多种类型组合也很快,加法是很快的,不用去LIKE OR 什么的了。
并且节省了空间,因为就一个值。还能使用索引。修改的时候也快。
原创文章,转载请注明: 转载自肚腩照明月'blog
本文链接地址: 一个字段包含多个类型该如何设计【原创】
文章的脚注信息由WordPress的wp-posturl插件自动生成
如果是这样设计的话,我查类型包含2的记录,应如何写sql呢?
查 2,3,6,7
这些都是值,比之前的字符串设计要有效率。
举个4位编码例子
0 是 0000
1 是 0001
2 是 0010
4 是 0100
8 是 1000
查2就是:
2 0010
3 0011
6 0110
7 0111
这几个第二位是1的。这个可以写个函数来获取。