Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: ALTER TABLE `table` DISABLE KEYS работает медленнее чем когда включена индексация.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ALTER TABLE `table` DISABLE KEYS работает медленнее чем когда включена индексация.
Bilka
Отправлено: 21 Декабря, 2016 - 23:44:21
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Здраствуйте.


использую PHP PDO для работы с базой, з mysqli тлже самое.


PHP:
скопировать код в буфер обмена
  1. //================================================
  2. здесь некоторый код
  3. //================================================
  4. //отключаю индекс
  5. try {  
  6.                 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7.                 $s_1 = "ALTER TABLE t1 DISABLE KEYS";
  8.                 $s_2 = "ALTER TABLE t2 DISABLE KEYS";
  9.                 $s_3 = "ALTER TABLE t3 DISABLE KEYS";
  10.                 $s_4 = "ALTER TABLE t4 DISABLE KEYS";
  11.                 $s_5 = "ALTER TABLE t5 DISABLE KEYS";
  12.                 $dbh->exec($s_1);
  13.                 $dbh->exec($s_2);
  14.                 $dbh->exec($s_3);
  15.                 $dbh->exec($s_4);
  16.                 $dbh->exec($s_5);
  17.                
  18.         } catch (Exception $e) {
  19.                 echo $e->getMessage();
  20.         }
  21. //===================================  
  22. здесь некоторый код
  23. //===================================  
  24. $s_1 = ...;
  25. $s_2 = ...;
  26. $s_3 = ...;
  27. $s_4 = ...;
  28. $s_5 = ...;
  29. //==============================================
  30. //здесь несколько тысяч запросов inser в 5 таблиц (крутетса в цыкле)
  31.  
  32.         try {  
  33.         $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  34.         $dbh->beginTransaction();
  35.         $dbh->exec($s_1);
  36.         $dbh->exec($s_2);
  37.         $dbh->exec($s_3);
  38.         $dbh->exec($s_4);
  39.         $dbh->exec($s_5);
  40.         $dbh->commit();
  41.         } catch (Exception $e) {
  42.         $dbh->rollBack();
  43.         echo   $e->getMessage();
  44.         }
  45.  
  46. //================================================
  47.  
  48.  
  49. //включаю индекс
  50. try {  
  51.                 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  52.                 $s_1 = "ALTER TABLE t1 ENABLE KEYS";
  53.                 $s_2 = "ALTER TABLE t2 ENABLE KEYS";
  54.                 $s_3 = "ALTER TABLE t3 ENABLE KEYS";
  55.                 $s_4 = "ALTER TABLE t4 ENABLE KEYS";
  56.                 $s_5 = "ALTER TABLE t5 ENABLE KEYS";
  57.                 $dbh->exec($s_1);
  58.                 $dbh->exec($s_2);
  59.                 $dbh->exec($s_3);
  60.                 $dbh->exec($s_4);
  61.                 $dbh->exec($s_5);
  62.                
  63.         } catch (Exception $e) {
  64.                 echo  $e->getMessage();
  65.         }
  66.  
  67.  
  68. //======================================================


в результате с выключением индексов работает на 20% медленнее, чем простой insert
таблицы myisam

+каждый следующий раз выполнения кода происходит медленнее. Почему? потому что в таблице записей становится все больше?

(Отредактировано автором: 21 Декабря, 2016 - 23:47:59)

 
 Top
Мелкий Супермодератор
Отправлено: 22 Декабря, 2016 - 10:39:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Bilka пишет:
таблицы myisam

Bilka пишет:
$dbh->beginTransaction();

А смысл?

Чем извращаться с отключением индексов запишите всё в temporary table и затем перенесите всё одним insert ... select для каждой таблицы.


-----
PostgreSQL DBA
 
 Top
Bilka
Отправлено: 26 Декабря, 2016 - 11:57:22
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Мелкий пишет:
А смысл?

по идее быстро должно быть.
 
 Top
Мелкий Супермодератор
Отправлено: 26 Декабря, 2016 - 12:21:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




С чего бы?
Для реплики объём данных будет тот же.
Для wal - да не пишет myisam wal вообще. Большая куча бинарного мусора, иногда прикидывающаяся способной прочитать то, что в неё записали.
Заворачивать myisam в транзакцию не только бесполезно, но ещё и вредно. Вот так посмотрите код и решите, что раз exec($s_3) сфейлился, значит s_2 и s_1 откатились.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB