最近做一个项目,用到了一条数据库查询语句,例如:select a, b from c where (a+b/1000) between 条件A and 条件B。可是会很慢,是不是因为(a+b/1000)的原因啊?不知道有没有什么好的办法啊?先谢谢了!

解决方案 »

  1.   

    基本上是。建议你贴出你的 show index from tablec;
    explain select a, b from c where (a+b/1000) between 条件Aand 条件B
    这种 a+b/1000 无法使用索引。要参考一下你的具体数据分布和条件,然后进行语句上的优化。
      

  2.   

    对索引列进行运算或者使用mysql自带函数都会是索引失效。
      

  3.   


    下面是全的sql语句
    public DataView FehlerbildErstellen(double sekunden, double nanosekunden, double zeitvor, double zeitnach, string indexFehlernummer)
    {
    double startZeit = sekunden + nanosekunden / 1000000000 - zeitvor / 1000;
    double endZeit = sekunden + nanosekunden / 1000000000 + zeitnach / 1000;
    string SucheFehlerBild = "SELECT Protokoll.Sekunden, Protokoll.Nanosekunden, " +
    " Logisches_Objekt.Nummer AS LObjNummer, Objekt.Nummer AS ObjNummer," +
    " diagnosetexte.Nummer, Protokoll.Typ AS ProtTyp, " +
    " Objekt.Typ AS ObjTyp " +
    " FROM ((((Objekt INNER JOIN Protokoll ON Objekt.Nummer = Protokoll.Einheit) INNER JOIN " + " Logisches_Objekt ON Objekt.Link_LObjekt = Logisches_Objekt.Nummer) INNER JOIN " +
    " Typ ON Objekt.Typ = Typ.Objekttyp AND Protokoll.Typ = Typ.Protokolltyp) INNER JOIN " +
    " diagnosetexte ON Protokoll.Nummer = diagnosetexte.Nummer AND Protokoll.Typ = diagnosetexte.Typ) " +
    " WHERE (diagnosetexte.Nummer IN (" + indexFehlernummer + ")) AND ((Protokoll.Sekunden+Protokoll.Nanosekunden/1000000000) BETWEEN " + strStartZeit + " AND " + strEndZeit + ")";
    }