Я разрабатываю программу (Webbased PHP, MySQL DB), которая включает в себя базу данных по всем городам мира по 2,5 миллионам записей (все в одной таблице). Когда я пытаюсь получить данные от него, серверу (предположим, localhost, wamp) потребовалось столько времени, чтобы искать и захватывать данные. Я искал через Интернет, чтобы найти наиболее оптимистичный способ использования таких больших данных. Одним из способов, я думаю, является сокращение этой таблицы до разных таблиц для каждой страны, чтобы упростить процесс поиска.Лучший способ обработки базы данных mysql с записями 2.5M
Может ли кто-нибудь предложить, как справиться с этим и поделиться знаниями?
EDIT: В таблице указаны две колонки. 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 "]";
Это не так много, MySQL даже на VPS может обрабатывать гораздо больше. Но не забывайте об индексах и оптимизации ваших запросов. –
Пожалуйста, добавьте структуру и запрос таблицы. Таким образом, мы можем видеть, где вам не хватает индексов и как вы извлекаете данные. –
Индексы могут вам помочь. – unknownbits