`sysj` int(8) NOT NULL DEFAULT '0',
  `pfen` tinyint(2) unsigned NOT NULL DEFAULT '0',
  `local` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `toptypeid` tinyint(2) NOT NULL DEFAULT '0',
  `typeid` tinyint(2) NOT NULL DEFAULT '0'解:
sysj: 8位日期数字 排序字段
pfen: 1到99的数字 排序字段
local: 1到9的数字 赛选字段
toptypeid: 1到5的数字 赛选字段
typeid: 2位的数字 赛选字段toptypeid 是一级分类大约4条数据
typeid 是一级分类下的二级分类, 每个一级分类下约10个问:
1,有没有必要加toptypeid 字段?
   其实查询时使用 typeid in(12,13,14,15,16,18,12,17)这样也可以实现,但是觉得好像使用 toptypeid = 1 这样貌似好些?
2, 多字段索引优化
  pfen sysj是按评分排序,和其他字段索引我写的是这样  KEY `toptypeid` (`toptypeid`,`local`,`sysj`),
  KEY `toptypeid` (`toptypeid`,`local`,`pfen`),
  KEY `typeid` (`typeid`,`local`,`sysj`),
  KEY `typeid` (`typeid`,`local`,`pfen`)  当然 ,如果不要toptypeid, 可以省略前3个索引.
  
  想知道大家的想法与建议,主要是这个是常用到的列表检索方式.

解决方案 »

  1.   

    1,要是语句需要,个人认为加上toptypeid也是一种方法,反正是tinyint,用不了多少空间;
    单独的typeid 也是可以的,看自己需要吧.
    2,手册里7.2.12. MySQL如何优化ORDER BY
    有介绍如何优化排序.
      

  2.   

     当然 ,如果不要toptypeid, 可以省略前3个索引.
    写错

     当然 ,如果不要toptypeid, 可以省略前2个索引.
      

  3.   

    1 多字段索引应该把散列比较大的字段放在前面
    `toptypeid` (`sysj`,`local`,`toptypeid`)
    2 lz建的这些索引 用explain看看是否有用到
      

  4.   

    多字段索引应该把散列比较大的字段放在前面
    这个确实不知道.
    我参考dz论坛的 KEY 'typeid' (fid
    typeid  
    displayorder  
    lastpost 
    )他的做法正好相反
      

  5.   

    你前面说过,这个toptypeid: 1到5的数字 赛选字段,1-5,一共才5个不同值,任意查一个,都只能筛选出20%的数据,重复性太高,这样的字段建立索引,执行计划也很少会用到,都用全表扫描了。唯一性太差的字段不建议添加索引。
      

  6.   

    主要查询语句
    上面的字段介绍和索引组合已经处理了啊.where typeid(或)toptypeid  local 
    order  sysj

    order  pfen例子:
    select * form table where typeid = 12
    order by pfen DESCselect * form table where toptypeid = 2 and local =2
    order by sysj DESC如果不用toptypeid的话select * form table where typeid in (12,13,14,13,15,12,12,12) and local =5
    order by id DESC组合大家应该想得到了吧
      

  7.   

    KEY `toptypeid` (`toptypeid`,`local`,`sysj`),
    这样的一个复合索引,相当于三个索引
    KEY `toptypeid1` (`toptypeid`)
    KEY `toptypeid2` (`toptypeid`,`local`)
    KEY `toptypeid3` (`toptypeid`,`local`,`sysj`)
    MYSQL使用的是最左前缀索引,复合索引建立后,能够用到最左前缀的其他索引就不需要再创建了。
      

  8.   

    select * form table where typeid in (12,13,14,13,15,12,12,12) and local =5
    order by id DESC
    这个命令将使用不到索引,因为ID不在索引字段内。
      

  9.   

    ID是主键, 没写出..
    数据量不是很大
    估计前期就几千条数据,几万条数据
    预计大部分时间在10W/ 20W以下主要是不想以后再麻烦
      

  10.   

    如果仅是这样,这个toptypeid则没什么特别的意义。
    索引创建(typeid,local,pfen) (typeid,local,sysj)这两个就行了。
      

  11.   

    (typeid,local,pfen)?
    (pfen,local,typeid) ?
      

  12.   

    (pfen,local,typeid) ?这个索引对 select * form table where typeid = 12 order by pfen DESC 无意义
      

  13.   

    select * form table where typeid = 12 order by  by id DESC
    ID
    主键 有用么