SELECT 
  u.id
FROM
  user u,
  (SELECT 
    id,
    tree 
  FROM
    user 
  WHERE id IN (30, 59, 58, 57, 56, 60, 61, 62, 63)) a 
WHERE u.tree LIKE CONCAT('1,', a.id) 
ORDER BY u.id ASC tree列的数据为:
1
1
1,30
1,59
1,59,100
....要查出(1,*)的数据,这个SQL要怎么优化?

解决方案 »

  1.   

    explain  
     或者 建索引 ,优化
      

  2.   

    SELECT id FROM user WHERE SUBSTR(tree,3,IF(locate(',',tree,3) > 0,locate(',',tree,3)-3,length(tree)-2)) IN (30, 59, 58, 57, 56, 60, 61, 62, 63)这样可以吗?
      

  3.   

    SELECT id FROM user WHERE LEFT(tree,2)='1,' AND (SUBSTR(tree,3,IF(locate(',',tree,3) > 0,locate(',',tree,3)-3,length(tree)-2))+0) IN (30, 59, 58, 57, 56, 60, 61, 62, 63)
      

  4.   

    创建两个单独的索引
    (id)
    (tree)