powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / insert в memory table
17 сообщений из 17, страница 1 из 1
insert в memory table
    #38986952
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрий день.

Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE `poiskserver`.`mon_results_help_1` (
  `company` INT(6) NOT NULL,
  `kgip_type` INT(6) NOT NULL,
  `kgip` INT(11) NOT NULL,
  `b_company` INT(6) NOT NULL,
  `m_ins` DATETIME NOT NULL,
   INDEX `common` USING BTREE (`company` ASC, `kgip_type` ASC, `kgip` ASC, `b_company` ASC))
   ENGINE = MEMORY;



В нее вставляется 3328500 записей, через такой запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
INSERT INTO mon_results_help_1 (company, kgip_type, kgip, b_company, m_ins)
  ( SELECT SQL_NO_CACHE a.company,
           a.kgip_type,
           a.kgip,
           b.company AS b_company,
           b.dt_action AS m_ins
   FROM poiskserver.kgips a
   JOIN poiskserver.kgips b ON a.kgip_type=b.kgip_type
   AND a.kgip=b.kgip
   WHERE a.company<>b.company
     AND a.removed=0
     AND b.removed=0) 



Время исполнения 24с
Причем почти все время идет на INSERT а не на SELECT

Если все зделать через OUTFILE, LOAD DATA INFILE:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT SQL_NO_CACHE a.company,
           a.kgip_type,
           a.kgip,
           b.company AS b_company,
           b.dt_action AS m_ins
   FROM poiskserver.kgips a
   JOIN poiskserver.kgips b ON a.kgip_type=b.kgip_type
   AND a.kgip=b.kgip
   WHERE a.company<>b.company
     AND a.removed=0
     AND b.removed=0
   INTO OUTFILE 'D:\mon_results_help_1';

LOAD DATA INFILE 'D:\mon_results_help_1' INTO TABLE mon_results_help_1;


Все ровно время будет 24с
Этого я не понимаю, ведь время на запись на и считывание с диска должно бить по идее больше?
Это первое...
Второе, как максимально ускорить вставку в таблицу?
...
Рейтинг: 0 / 0
insert в memory table
    #38986966
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111Если все зделать через OUTFILE, LOAD DATA INFILE:denis111111Все ровно время будет 24сИзмерьте каждую часть по-отдельности.
...
Рейтинг: 0 / 0
insert в memory table
    #38986970
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111,

И покажите план SELECT-а.
...
Рейтинг: 0 / 0
insert в memory table
    #38987018
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftИзмерьте каждую часть по-отдельности.
select 0.016 с
вставка INTO OUTFILE 'D:\mon_results_help_1' 19с
LOAD DATA INFILE 14
количество записей для вставки 3804000
Что-то select быстро делается очень
miksoftИ покажите план SELECT-а..
idselect_typetabletypepossible_keyskeykey_lenrefrowsextra'1' 'SIMPLE' 'b' 'ALL' 'kgip_type kgip common' NULL NULL NULL '669233' 'Using where''1' 'SIMPLE' 'a' 'ref' 'kgip_type kgip common' '10' 'poiskserver.b.kgip_typepoiskserver.b.kgip' '4' 'Using where; Using index'
...
Рейтинг: 0 / 0
insert в memory table
    #38987019
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111select 0.016 с
вставка INTO OUTFILE 'D:\mon_results_help_1' 19сЭто как-это? Как вы смогли их отдельно измерить?
...
Рейтинг: 0 / 0
insert в memory table
    #38987024
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Просто cделал select без insert.
Это можно еще как нибудь сделать?
...
Рейтинг: 0 / 0
insert в memory table
    #38987030
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111miksoft,

Просто cделал select без insert.
Это можно еще как нибудь сделать?Похоже, что вы измерили не время SELECT, а время выдачи первых записей. А полный SELECT отрабатывает как раз примерно за 19 с.
...
Рейтинг: 0 / 0
insert в memory table
    #38987033
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
INDEX `common` (`kgip_type` ASC, `kgip` ASC, `company` ASC, `removed` ASC);
...
Рейтинг: 0 / 0
insert в memory table
    #38987034
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111,

И покажите DDL таблицы poiskserver.kgips, включая индексы.
...
Рейтинг: 0 / 0
insert в memory table
    #38987036
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111
Код: sql
1.
INDEX `common` (`kgip_type` ASC, `kgip` ASC, `company` ASC, `removed` ASC);

Я бы предложил другой индекс (`kgip_type`, `kgip`, `removed`, `company`)
...
Рейтинг: 0 / 0
insert в memory table
    #38987043
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Почему?
...
Рейтинг: 0 / 0
insert в memory table
    #38987054
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111miksoft,
Почему?Потому что поле company проверяется на неравнество. Насколько я в курсе, MySQL не умеет перебирать ветки индекса (в вашем варианте это ветки с полями `company`, `removed`), если не знает точное их количество. Т.е. проверку removed=0 по такому индексу он произвести не сможет.
...
Рейтинг: 0 / 0
insert в memory table
    #38987057
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Как бы там не было выборка и так быстрая... Так как при join используется common
...
Рейтинг: 0 / 0
insert в memory table
    #38987088
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111выборка и так быстраяЧто-то не похоже, судя по 19 секундам.
denis111111Так как при join используется commonСудя по представленному плану - нет. Впрочем, в нем явно есть ошибки копирования, так что точно судить не могу.
...
Рейтинг: 0 / 0
insert в memory table
    #38987107
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftdenis111111выборка и так быстраяЧто-то не похоже, судя по 19 секундам.
denis111111Так как при join используется commonСудя по представленному плану - нет. Впрочем, в нем явно есть ошибки копирования, так что точно судить не могу.

Да, я плохо скопировал.

Ну вот смотрите: виборка и вставка 19с
Если делать только выборку, без вставки, то время что-то 0.012с

Как это понимать?

query_cache_type = 0 , тож это не с кеша.
Или в workbench какая то хитрая логика ...
...
Рейтинг: 0 / 0
insert в memory table
    #38987116
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
denis111111,

Все таки если заигнорить все индексы
IGNORE INDEX(common, kgip , kgip_type)
то тогда действительно долго)
...
Рейтинг: 0 / 0
insert в memory table
    #38987126
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis111111Если делать только выборку, без вставки, то время что-то 0.012сmiksoftПохоже, что вы измерили не время SELECT, а время выдачи первых записей.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / insert в memory table
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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