非常感谢您的点击,若您懂,请赐教!详情如下:我有一个表,字段为:ID,AA,BB,CC,DD,EE,FF,GG,Date
ID为主键
AA,BB,CC为三个类别
Date为日期因为我的网页读取数据列表,经常要用到Date列来排序,为了查询速度,所以我把Date设为聚集索引。
但是小弟不才,接下来就遇到疑问了。问题一:
因为我也会通过ID来进行前端查询或后台修改某一条数据,为了前端的查询速度,我是否应该为ID设一个非聚集索引(ID目前已经是主键),设了后速度会提升吗?问题二:
在网页中产品列表中,经常会用到AA,BB,CC这三个类别来筛选数据,为了查询速度,所以我给每个列都单独设了一个非聚集索引。但是,有时候这三个列会分别组合起来筛选一些数据,那这个时候这三个类别对应的三个非聚集索引,会不会三个同时生效而优化速度呢?还是系统筛选一个速度最快的一个,只掉用一个索引?若您觉得我的设置非常不合理,请您教教我,谢谢您。

解决方案 »

  1.   

    你的主键不是聚集索引?建议id作为主键且设置为聚集索引(默认就是)date 列使用频繁建立非聚集索引就好
    可以考虑给 AA,BB,CC 建立复合索引
      

  2.   

    “可以考虑给 AA,BB,CC 建立复合索引”复合索引的话,若只用到其中一列数据,这个复合索引的效率是不是就不行了》
      

  3.   

    ID要真是主键的话, 肯定是聚集索引了个人建议
    1.复合主键 primary key(date,ID), 这样肯定接时间顺序存储记录的, 检索排序都很快,如果单纯按日期再查也快, 如果单独按ID来查的话,可以写成(date>='1900-01-01' and date<='2078-12-31') and ID=?, 因为这样的话,肯定能利用上索引
    2.复合非聚集索引 (AA,BB,CC), 对于复合索引来说,只有使用了复合中的第一个字段才会利用上索引,所以,按AA,BB,CC哪个使用频繁,而且也可以使用建议1中的技巧,在只按BB查询时,可以写成 AA like '%' and BB=?
      

  4.   

    问题1,date 建立聚集索引,id 查询更新 建立非聚集索引
    问题2,aabbcc 经常用到的 建立非聚集索引 其他的列可以用包含列索引 最好做测试数据,实际的测试一下.