我有一个表!
a
id  tid
1    1,2
2    1
3    2
4    2,3
5    1,2,3tid 是数字 用逗号分开我要查询某个数字如 tid等于1
我用的是 where tid like '%1%'
发现like效率很低!怎么样提高和优化最好能用上索引之类的

解决方案 »

  1.   

    1、一般用FIND_IN_SET、INSTR之类的函数,效率不会太高;
    2、修改表结构,不符合3NF
    id tid
    1 1
    1 2
    2 1
    3 2
    4 2
    4 3
    5 1
    5 2
    5 3
    在TID上建立索引
      

  2.   

    用正则呀.tid regexp "^1,"
      

  3.   


    全文索引有些问题!过多一样好像就不显着了
    我原来想这样设置a
    id tid
    1 1,2
    2 1
    3 2
    4 2,3
    5 1,2,3改成
    id id1 id2 id3
    1   1   1
    2   1
    3       1
    4       1    1
    5   1   1    1
    查询1就where id1=1 查询2就where id2=2 
    如果在加一个值 4
    就要加一个字段!对程式控制很不方便!
    所以才来提问一下有没好的解决方法一楼的还算可行!控制起来也有点麻烦!算是比较好的解决方法
      

  4.   

    全文索引有些问题!过多一样好像就不显着了
    我原来想这样设置a
    id tid
    1 1,2
    2 1
    3 2
    4 2,3
    5 1,2,3改成
    id id1 id2 id3
    1  1    1
    2  1
    3       1
    4       1   1
    5   1   1   1
    查询1就where id1=1 查询2就where id2=1  
    如果在加一个值 4
    就要加一个字段!对程式控制很不方便!
    所以才来提问一下有没好的解决方法一楼的还算可行!控制起来也有点麻烦!算是比较好的解决方法