数据库: mysql
问题1
要求:按照a字段排序,相同的时候按照b字段排序,返回前100行记录
限制:数据量非常大,可能有几十万条记录,需要速度很快
问题2
要求:按照a+b字段的和排序,返回前100行记录
限制:数据量非常大,可能有几十万条记录,需要速度很快

解决方案 »

  1.   

    问题1:
    建立组合索引(a,b);
    select * from tb order by a,b limit 100;问题2:
    建立函数索引(a+b)
    select * from tb order by (a+b) limit 100;几十万数据小case啊,加了索引都能满足你的要求。当你表达到了几千万上亿记录的时候,再考虑别的优化方式。
      

  2.   

    如何建立索引呢  是在create table的时候吗 请写个例子 
    我平时不涉及到sql的  所以担心写错 最好有个例子还有如果我这个表(大概30个字段)建立了5个索引 会不会对效率有影响? a+b这样的索引该怎么建立?
      

  3.   

    问题1create index xxx on table1 (a,b);
      

  4.   

    问题2按照a+b字段的和排序, 这个没有办法,你只能在表中添加一个字段C,C=A+B, 然后在C上创建索引。
      

  5.   

    如果不加索引的话 大概需要多久呢 
    效率能提升多少呢 create index xxx ...
    这个XXX只是一个定义的作用 在其他的语句中都不会使用和修改他是吗
    和在创建表的时候声明 INDEX[indexName] (username(length))  有什么却别? 
      

  6.   


    1:select * from tb order by a,b limit 100;
    在a,b上面建索引。
    2:增加一个C字段,内容等于a+b, 然后在C上建索引。MYSQL不支持函数索引。索引的名称没有实际意义,只有在创建和删除的时候有用,或者在指定使用哪个索引的时候有用。创建表的时候建索引和后面ALTER TABLE建索引没有区别。