Как Ускорить Запрос к БД?

165
18 сентября 2017, 04:45

У меня есть таблица на 30500 записей. В ней находятся города, районы, и всякие населенные пункты. Все в одной таблице.

Я написал автогенратор мыла имени и Самое Долгое, по продолжитльности выполнения, 3 запроса из этой большой таблицы, Которые генерируют Область потом город из области и район из этой области.

Как ускорить обращение к бд? Идея возникла использоать union, но тут дело в том что я не вытягиваю три разных массива.

Как быть?

Потому что я в каждом отдельном методе рандомно выбирал область, город, район, а с использованием union SELECT, выдает большой массив в котором рандомно если и выбиру то получится или может получиться, Район, район, область. А хотелось бы четко Область, Город, Район.

В общем нужна подсказка а то генератор долго обращается к базе. именно по поводу каждого обращения и выборке из базы.

Вот пример похожего метода для города и района. В данном случае выбирается область.

public function AutoqualiOblast()
{
    $territory=$this->territor;
    $db = DB::getInstance();
    $query = "SELECT ter_address,reg_id FROM t_koatuu_tree where reg_id  = " . $territory
        . " AND ter_type_id = 0 AND ter_pid <=> NULL";
    $result = $db->query($query);
    if (!$result) {
        die($db->error);
    }
    $obl = [];
    while ($row = $result->fetch_assoc()) {
        $ter = htmlspecialchars($row['ter_address'], ENT_QUOTES, 'UTF-8');
        $obl[] = $ter;
    };
    $oblast=$this->escape($this->clean($obl[mt_rand(0, count($obl) - 1)]));
    return $oblast;
}

Вот то что я пытаюсь упростить

    public function UnionSelect()
{
    $territory=$this->territor;
    $db = DB::getInstance();
    $query = "
SELECT ter_name,ter_type_id,reg_id FROM t_koatuu_tree where reg_id  = 63
         AND ter_type_id = 0 AND ter_pid <=> NULL
union
 SELECT ter_name,ter_type_id,reg_id FROM t_koatuu_tree where reg_id  = 63 AND t_koatuu_tree.ter_type_id =1
union
SELECT ter_name,ter_type_id,reg_id FROM t_koatuu_tree where reg_id  = 63 AND t_koatuu_tree.ter_type_id = 2";
    $result = $db->query($query);
    if (!$result) {
        die($db->error);
    }
    $rayons = [];
    while ($row = $result->fetch_all()) {
        echo "<pre>";
        var_dump( $row );
        echo "</pre>";
    };

}
READ ALSO
Как прописать ссылку в htaccess?

Как прописать ссылку в htaccess?

Подскажите как прописать ссылку в htaccessне переключается постраничный вывод из файла , в браузере выводится ссылка, а на странице не переключается

191
разбор многомерного массива через foreach

разбор многомерного массива через foreach

Начинаю, изучать php и хочу сделать логирование ошибокПытаюсь разобрать функцию debug_backtrace(), и не могу понять из-за чего он не хочет брать [0] массив...

155
Автозавершение текста в TextBox по подстроке

Автозавершение текста в TextBox по подстроке

Мне понадобилось найти функцию, которая отображает подсказки в TextBox в виде списка подходящих строк (те

206
Отловить нажатие кнопки &ldquo;minimize&rdquo; в консоли WinAPI

Отловить нажатие кнопки “minimize” в консоли WinAPI

Реально ли в консольном приложении C/C++ отловить нажатие кнопки minimize (свернуть)? Спасибо

219