解决方案 »

  1.   

    看过很多索引的文章
    当具体还是有些不明白比如
    TABLE 
     ID NAME AGE SEX  TEACHERID GRADE  DATE
     1   A    17  男    12         高三  2008-02-23
     2   B    17  男    11         高二  2008-04-23
     3   C    16  男    13         高一  2008-02-21 
     4   D    16  男    12         高三  2008-05-23
    要统计的有 所有高三的学生 所有入学DATE 所有老师的学生
    如何建索引比较好
     
      

  2.   

    楼主看来是新手
    you84.com 公交搜索网 -- 坐公车,巴士一下,你就知道 ;提供全国400多个城市的公交搜索,让你在最短的时间找到最佳的乘车方案.
      

  3.   

    索引由于也不能凭空产生,也要记录被索引内容,所以说被索引内容越简单越好,比如AGE可以用1/2区别,GRADE也用数字,DATE可以考虑用linux时间戳,也是数字
    即便被索引的内容不够简化,查询的时候,使用索引比不用要好,当前TEACHERID GRADE  DATE 联合索引,也不错
    看看当前查询,使用到了哪些索引 ,索引的是否合适,用 EXPLAIN SELECT 代替 select,查询看看
    另外,索引会减慢一点数据修改时的速度,每修改数据,索引会刷新一次,所以也不会有人把所有子段都索引上
    此外,如果where有!= 不等号,将不会使用索引。字段被函数包裹:substr(A字段),也不会使用索引。LIKE的时候,如果%test%不会使用索引,test%会使用
      

  4.   

    谢谢楼上的我根据需要建了一些索引 测试发现速度果然快了很多我建一个索引就用EXPLAIN来测试效果只是我想做到怎么样最优化索引我就把最多用到的字段加了联合索引,有些字段用到也多,,我不知道该不该加索引
      

  5.   

    比如这个例子
    AGE 可能有10多项不同值 GRADE 只有3项不同值 DATE是每天都有 TEACHEERID 是30多项
    用到的有
    SELECT COUNT(*) FROM TEST WHERE GRADE = ‘高三
    SELECT COUNT(*) FROM TEST WHERE GRADE = ‘高三’AND DATE = '2008-02-23 '
    SELECT COUNT(*) FROM TEST WHERE TEACHERID = '12' AND GRADE = '高三'
    等等
      

  6.   

    如果 字段里多是重复的值,比如高一/高二/高三,男/女等,据说 为此建立一个索引没什么意义,
    另外,联合索引通常,查询条件主要为这些字段的联合查询
    where DATE='2008-02-23' and AGE>11,这样联合索引有效
    或者,单独条件为联合索引的第一项,比如第一项为DATE
    where DATE='2008-02-23' 有效
    where AGE>11 无效
    那么如果有可能,用EXPLAIN SELECT 每一种查询都看看
    如果这样太恐怖了,我的查询条件是不可预计的,就
    1。联合查询占了30%以上,那么为此做联合索引
    2。除去联合索引的第一项,其他项,如果单独查询30%以上,再为此做单独索引
      

  7.   

    mysql的索引是用B+树实现的,真想搞清楚,先搞清楚b树结构,
    b+树是b树的一种变种,搞清楚了上面的问题就不难了解释了.
    b+树上的索引结点可采用二分查找,效率o(logn),
    而无索引的查找的时间复杂度是o(n),(我是指查找一条记录的效率),
    由此可对比得出.稍微补充一下,为啥要用B+树就是为了解决内存中不能载入全部数据的时候用来分级载入数据,
    这样可以充分利用内存的换入换出来解决海量数据操作的问题,
    (海量数据,没处理过,,,网上找的,b树和b+树都是二分查找)