排序依据:在我的SQL中订购时出错

时间:2013-04-10 04:16:32

标签: sql mysqli

我尝试加入两个表,

SELECT E . * , D . * 
FROM  `basicincident` E
LEFT JOIN incident D ON E.`INC_KEY` = D.`INC_KEY` 
WHERE E.`STATE` =  "MD"
AND SUBSTRING( E.INC_DATE , -4 ) =  "2009"
LIMIT 0 , 10

它产生了良好的结果..,

但是在实现order by时,生成结果需要更长的时间..,

SELECT  E . * , D . *
FROM  `basicincident` E 
LEFT JOIN incident D ON E.`INC_KEY` = D.`INC_KEY` 
WHERE E.`STATE` =  'MD' 
  AND SUBSTRING( E.INC_DATE , -4 ) = '2009' 
  AND E.INC_KEY >"MD0100110520090000015011111" 
ORDER BY E.INC_KEY limit 0,2

何时

按顺序使用,

它无法正常工作..,

我该怎么做..,

感谢先进..,

2 个答案:

答案 0 :(得分:0)

您是否使用周期期间需要空格?

SELECT E . * , D . *

您需要提供订单,因此请以这种方式创建SQL:

SELECT  E.*, D.* FROM `basicincident` E
    LEFT JOIN incident D ON E.`INC_KEY` = D.`INC_KEY`
    WHERE E.`STATE` = 'MD'
        AND SUBSTRING( E.INC_DATE , -4 ) = '2009'
        AND E.INC_KEY > "MD0100110520090000015011111"
    ORDER BY `E`.`INC_KEY` ASC
    LIMIT 0,2

答案 1 :(得分:0)

E.INC_KEY和D.INC_KEY的索引会出于各种原因,包括这个原因。

您可以尝试通过d.INC_KEY进行排序,以防万一在优化器中发生了一些有趣的事情。

关于上述答案,请忽略它!

1)你不能忽略带有LIMIT的ORDER BY。如果你这样做会选择哪些行?无论从查询计划中吐出什么 - 很可能不是你想要的。如果您需要ORDER BY,那么您需要它。性能问题不应妨碍提供实际正确的结果!

2)数据库旨在排序。认为你可以做得更好是愚蠢的 - 你做不到。使用正确的工具来完成正确的工作。