【发布时间】:2013-09-22 19:53:46
【问题描述】:
我正在开发一个程序(基于 Web 的 PHP、MySQL DB),其中包括世界各地所有城市的数据库,包含 250 万个条目(全部在一个表中)。当我尝试从中获取详细信息时,服务器(假设 localhost,wamp)花了很多时间来搜索和获取数据。 我在互联网上搜索以找到使用如此大数据的最乐观方法。 我认为,一种方法是将此表缩小为每个国家/地区的不同表,以简化搜索过程。
谁能建议如何处理这个问题并分享知识?
编辑:
该表包括两列。 1.country 2.city。我使用WHERE country=XX 使搜索过程更容易,但是需要很长时间才能处理。
数据库:(表名:cities)
country city
US Lakewood Estates
US Lakewood Estates Mobile Home Park
US Lakewood Falls
US Lakewood Forest
US Lakewood Gardens
US Lakewood Harbor
US Lakewood Heights
US Lakewood Highlands
US Lakewood Hills
.
.
.
PHP 代码:
$data = mysql_query( "SELECT * FROM cities where country='".mysql_real_escape_string($_GET['country'])."' ORDER BY country" )
or die( mysql_error() );
$i = 0;
while( $row = mysql_fetch_array( $data )){
if ( strpos( strtolower( $row['city'] ), $q ) !== false ) {
$i++;
$arr[] = $row['city'];
if ($i==10) {break;}
}
}
echo "[";
for ($x=0; $x<count($arr); $x++)
{
echo '{"name":"'.$arr[$x].'"}';
if ($x!=count($arr)-1) {echo ',';}
}
echo "]";
【问题讨论】:
-
不是那么多,即使在 VPS 上的 MySQL 也可以处理更多。但不要忘记索引和优化查询。
-
请添加您的表结构和查询。这样我们就可以看到您缺少索引的位置以及您如何检索数据。
-
索引可能会对您有所帮助。
-
使用
LIMIT 10而不是if ($i==10) {break;}可能更明智
标签: php mysql large-data