powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Быстрый поиск в БД
5 сообщений из 5, страница 1 из 1
Быстрый поиск в БД
    #39093935
Фотография paha4444
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Столкнулся с проблемой поиска в таблице с большим кол-вом записей.
Дело в том, то у меня есть парсер который я написал на PHP который парсит данные из XML файла, а потом обновляет данные в БД. На данный момент уже набралось около 57тыс. записей в таблице. И вот я начинаю парсить из XML и там тоже около 50тыс., т.е я беру прохожусь построчно :

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
         $reader = new XMLReader();
         $reader->open('update_xml/SiteData2.xml');

         while ($reader->read()) {
             if ($reader->name == "Apartment") {
               //  echo '<p>'.$reader->getAttribute("kvnumber").'</p>';


                  $building_id = (int)$reader->getAttribute("buildingid");
                  $apartment_id = (int)$reader->getAttribute("id");
              

                   $rooms = $reader->getAttribute("rooms");
                   $flatfloor = $reader->getAttribute("flatfloor");
                   $facing = $reader->getAttribute("decoration");



Но при проходе по строке в XML файле мне нужно обратится в БД и посмотреть, если такой записи нет тогда вставить новую, если есть то обновить в ней данные.
Я в цикл который выше добавил сначала

Код: php
1.
2.
3.
4.
              $sql3 = "SELECT sub_object_id FROM `#__sub_objects` 
                       WHERE `apartment_id` = '$apartment_id'";
              $db->setQuery($sql3);
              $sub_object_id = $db->loadResult();    



Раньше когда записей было не много, то это срабатывало, а сейчас нет. скрипт просто подвисает.
Я решил искать не в БД а в массиве, я обращаюсь только один раз и получаю все данные и пишу их в глобальную переменную до цикла который выше:


Код: php
1.
2.
3.
              $sql3 = "SELECT sub_object_id,apartment_id FROM `#__sub_objects`";
              $db->setQuery($sql3);
              $this->sub_objects = $db->loadAssocList();   



а потом уже с помощью функции в цикле который выше ищу:
Код: php
1.
$sub_object_id = $this->search_sub_object_id($apartment_id); 




это сама функция поиска в многомерном массиве
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function search_sub_object_id($val){
      
               foreach ($this->sub_objects as $key => $value)
                   {
                   if (array_search ($val, $value))
                        {
                        return ($value['sub_object_id']);
                        }   
                   }
}



но оно все равно подвисает, да и память грузит нехило. Посоветуйте что нибудь. Скорее всего нужно оптимизировать как нибудь БД.
...
Рейтинг: 0 / 0
Быстрый поиск в БД
    #39093947
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь форум по MySQL, а не по PHP.

Модератор: Тема перенесена из форума "MySQL".
...
Рейтинг: 0 / 0
Быстрый поиск в БД
    #39093997
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paha4444но оно все равно подвисает, да и память грузит нехило. Посоветуйте что нибудь. Скорее всего нужно оптимизировать как нибудь БД.

Для начала:

1) Навесить нужные индексы на таблицу.
2) Организовать вставку/обновление в хранимой процедуре (навешивание индексов это не отменяет!).

По ходу тебе нужен индекс на поле apartment_id.

P.S. И да, ты уверен, что тормозит именно БД, а не парсинг XML?
...
Рейтинг: 0 / 0
Быстрый поиск в БД
    #39094005
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1.Создаешь временную таблицу.
2. Заливаешь данные в нее
3. Делаешь запрос Join к первой таблице. Заливаешь новые записи.
4. Делаешь запрос Join^ к первой таблице. Заливаешь записи которые были.
...
Рейтинг: 0 / 0
Быстрый поиск в БД
    #39094069
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paha4444оно все равно подвисает, да и память грузит нехилоЭто не описание проблемы.


paha4444Посоветуйте что нибудь. Скорее всего нужно оптимизировать как нибудь БД.Вполне вероятно, раз Вы подошли к этому. В форуме по используемой СУБД покажите структуру данных, базы, таблиц, связи. И, разумеется запросы и алгоритмы, которые являются проблемными. Код на PHP постить в форуме по СУБД не следует.

Модератор: Насколько понимаю, по части PHP-кода вопросов нет. Засим закрываю топик.
--
vkle
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Быстрый поиск в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]