搜索数千条记录(属性)并返回数据

时间:2011-08-18 11:01:00

标签: php mysql

所以我实现了谷歌地图,使用javascript绘制多边形。我使用getBounds来获取latLongs。然后我调用一个数据库(postcodes),其中包含英国每个邮政编码的每个纬度。

此查询如下所示:

SELECT * FROM `postcode`.`postcodeGoogle` WHERE (`lat` BETWEEN '$lat1' AND '$lat2')
    AND (`long` BETWEEN '$long1' AND '$long2')

哪个好,返回正确的数据。

然后我有了第二个数据库address_list,其中包含英国的每个地址(目前它只包含Kettering区域,因此有12,000行)。我在第一个查询上执行while循环,然后在每个循环上运行此查询:

SELECT * FROM `digital_hub`.`address_list` WHERE `postcode`='".$row['postcode']."'

然后我将邮政编码的latlong添加到变量:

$resultE = $resultE."(".$row['lat'].", ".$row['long'].") || ";

然后在循环结束时回显。

此页面通过jQuery调用:

$.get("php/properties.php?bounds="+bounds, function(data){
        var theLatLongs = data.split(" || ");
        totalcount = 0;

        for(x in theLatLongs){
            var theLatLong = "";
            var latLong = theLatLongs[x].substr(1);
            var latLong = latLong.slice(0, -1);
            var theLatLong = latLong.split(", ");
            var thelat = theLatLong[0];
            var thelong = theLatLong[1];

                totalcount = totalcount+1;

        }
    $('#totalcount').html('<h6><span>'+totalcount+'</span> Households found</h6>Filtered by location');
});

一切正常(我认为)。它的速度非常慢。我知道facebook有更好的资源,但是创建广告过滤器的速度非常快。我还将实施更多过滤器。我试过加入,但时差似乎不大。有时它根本不会返回结果并导致我的mysql服务崩溃......

1 个答案:

答案 0 :(得分:1)

有3个源可以减慢代码:mysql,php,js。

我要做的第一件事就是在像toad这样的工具中运行sql(连接版本),或者做一个输出原始结果的php文件。您可以将console.time / console.timeEnd添加到js,并在php中添加mictrotime。

另一个“快速而肮脏”的检查是过去“your_server”/php/properties.php?bounds=YourBounds, 并检查结果。它会给你一些指示。

如果您确定它是sql,请尝试索引digital_hub.address_list.postcodes,postcode.postcodeGoogle.lat和postcode.postcodeGoogle.long。

然后,在你的php“raw”脚本(或你的sql工具)中,尝试使用less column调用查询, 甚至是“select count(*)”。如果“select count(*)”更快,则意味着返回值会降低系统速度。这是典型的空(非空)日期字段。

但他们的关键是简单,时间过程的不同部分来隔离瓶颈。

console.time('load');
$.get("php/properties.php?bounds="+bounds, function(data){
        console.timeEnd('load');
        console.time('parse');
        var theLatLongs = data.split(" || ");
        totalcount = 0;

        for(x in theLatLong ){
            var theLatLong = "";
            var latLong = theLatLongs[x].substr(1);
            var latLong = latLong.slice(0, -1);
            var theLatLong = latLong.split(", ");
            var thelat = theLatLong[0];
            var thelong = theLatLong[1];

        totalcount = totalcount+1;
        }
console.timeEnd('parse');
    console.time('display');    
    $('#totalcount').html('<h6><span>'+totalcount+'</span> Households found</h6>Filtered by location');
    console.timeEnd('display');        
});

在旁注中,您可以考虑使用json数据。 (并检查你对thelatlong js var的使用,但我猜你正在调试) 在php:

while ($row = msqlqresult) {
    $resultArray[] = $row;  
}

$resultJson = json_encode($resultArray);

在js:

console.time('load');
$.getJSON("php/properties.php", {bounds: bounds}, function(data){
        console.timeEnd('load');
        console.time('parse');
        totalcount = 0;

        for(var x in data){
            var thelat = theLatLong[x].lat;
            var thelong = theLatLong[x].long;

            totalcount = totalcount+1;
        }
    console.timeEnd('parse');
    console.time('display');    
    $('#totalcount').html('<h6><span>'+totalcount+'</span> Households found</h6>Filtered by location');
    console.timeEnd('display');

});