现在有字段A。取值是单个的,比如取值是3
有一个字段,取值是多个的。比如字段B,取值可能是1、2、3、4
现在要查出所有含有字段A的值的记录。比如:记录1:3、5、7(符合)
记录2:6、8、9(不符合)请问如何设计数据库比较合理?充分考虑到性能优化。

解决方案 »

  1.   

    我好像想到方法了。
    在数据库里面是这样保存B字段的数据的
    |2|4|6|3|
    如果我要查询是否含有3.就 like %|3|%。这样可行吗?
      

  2.   

    如果值域不超过64,那么可直接使用 set 类型
    如果不想用 set 类型,值域也肯能远超过 64
    那么可以用 varchar 或 text 类型
    数据由以逗号分隔的串组成,比如 2,4,6,3
    mysql 提供了 find_in_set 函数,用来完成查找工作
      

  3.   


    受教了。第一次懂得mysql字段还有set类型的。mysql还有find_in_set函数
    两种方法都可以解决问题。有空我亲自测试一下哪个方法速度最快!
      

  4.   

    like 和 find_in_set 还有 in
    都是在求“是否在其中”,性能肯定不会高到哪里去
    把数据打包在一起,本身就是以时间换空间的做法要想达到高速的目的,当然就不能打包在一起,而是独立存放并加上索引,当然还要加上宿主的id
    这就是所谓的以空间换时间