2011-12-14 55 views
-1

我有一个像下面这样的查询。这些可以优化或有人可以建议如何索引?缓慢的mysql查询,设置索引或优化

SELECT t1.`Geo ID`, 
     t1.`Sub Unit Geo ID`, 
     t1.`Sub Unit SW ID`, 
     t1.`Building No`, 
     t1.`Building Name`, 
     t1.Road, 
     t2.ID `Matching NEW_ID`, 
     t2.Sub, 
     t2.SUB_BUILDING_NAME, 
     t2.BUILDING_NAME, 
     t2.BUILDING_NUMBER, 
     t2.THOROUGHFARE, 
     t2.E - t1.Easting `East Difference`, 
     t2.N - t1.Northing `North Difference` 
FROM upcdata t1 JOIN 
     newer t2 ON (t2.E * 1000) BETWEEN t1.Easting - 25000 AND t1.Easting + 25000 
        AND (t2.N * 1000) BETWEEN t1.Northing - 25000 AND t1.Northing + 25000 
        AND t1.Road = t2.THOROUGHFARE 
        AND t1.`Building Name` = t2.BUILDING_NAME 
        AND t1.`Building Name` <> "" 
ORDER BY t1.`Geo ID` 
+0

这不是我们在这里所做的。 – 2011-12-14 11:43:47

回答

2

索引不用于计算值,但您可以改变您的查询,所以解决这个问题!
更改between把乘法上的值:

.... 
join newer t2 
    ON t2.E BETWEEN (t1.Easting - 25000)/1000 AND (t1.Easting + 25000)/1000 
    AND t2.N BETWEEN (t1.Northing - 25000)/1000 AND (t1.Northing + 25000)/1000 
.... 

的比较是数学上是相同的,但它意味着有2间固定值查找上,而不是乘以T2值,每行因为它不使用索引。

即使没有索引,只需要避免数百万次的计算就可以快得多