powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Экспорт данных из Mysql в 1 c
56 сообщений из 56, показаны все 3 страниц
Экспорт данных из Mysql в 1 c
    #39207270
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Я 1с -ник , с субд mysql знаком относительно.
Стоит задача перенести данные из mysql на 1 с.

В 1 с использую код, работая через драйвер

Connection = Новый COMОбъект("ADODB.CONNECTION");
Попытка

Connection.Open("
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=******;
|DATABASE=*****;
|UID=*****;
|PWD=******");

Исключение
Сообщить("Ошибка соединения:"+ОписаниеОшибки());
Возврат;
КонецПопытки;

Connection.Execute("Запрос1");

Connection.Execute("Запрос2");

Connection.Execute("Запрос3");

Также имеется база mysql
в ней 2 таблицы
kartab -картотека абонентов 536000 записей
структура таблицы

id int(10) unsigned NO PRI auto_increment
lic_sch varchar(16) NO PRI
fam varchar(64) YES
name varchar(64) YES
otch varchar(64) YES
cod_tn varchar(8) YES
cod_st varchar(8) YES
home varchar(10) YES
kv varchar(10) YES
kom int(5) YES
chlenov int(5) YES
telef varchar(16) YES
cod_kat varchar(16) YES
cod_tpr varchar(16) YES
schlamp int(1) YES
rabot int(1) YES
shifr varchar(15) YES
cod_pd varchar(10) YES
koment varchar(128) YES
plit int(1) YES
yearmon date YES
errsum int(11) YES
errsumn int(11) YES
summa_kn int(11) YES
summa_kc int(11) YES
cod_con varchar(16) YES
srednee int(11) YES
mesyac int(11) YES
date_otkpl date YES
date_otkfk date YES
nomer_tp varchar(16) YES
fider varchar(11) YES
nomer_opor varchar(16) YES
smena varchar(16) YES
data_kon int(11) YES
date_kon date YES
familiya varchar(64) YES
pr_opl varchar(8) YES
akt int(4) YES
cod_pred varchar(8) YES
date_zap date YES
lgota varchar(4) YES
procent varchar(11) YES
date_dog date YES
cod_isp varchar(8) YES
rachpok int(10) YES
pokazanie int(11) YES
dkont decimal(7,2) YES
date_r date YES
date_lgt date YES
reg_nom varchar(16) YES
cod_tp varchar(6) YES
date_pr date YES
priravn int(6) YES
dog varchar(8) YES
penya_t int(11) YES
askue int(1) YES
summa_vd int(16) YES
cod_vid int(4) YES
lg_kvt int(11) YES
errsumv int(11) YES
kvt_mes int(11) YES
summa_mes int(16) YES
old_lgt int(1) YES
deti int(1) YES
pr_erip int(1) YES
cod_alg varchar(11) YES
n_sch varchar(32) YES MUL
cod_tsch varchar(16) YES MUL
fider_code varchar(32) YES
tp_code varchar(32) YES
line_code varchar(32) YES
del int(1) YES
base varchar(16) YES MUL


kartkvgd - оплаты абонентов 12500000 записей

id int(10) unsigned NO PRI auto_increment
lic_sch varchar(16) YES MUL
pachka varchar(10) YES
yearmon date YES MUL
err int(1) YES
errsum int(11) YES
ko int(4) YES
data_old int(11) YES
data_new int(11) YES
razn_kn int(11) YES
razn_kc int(11) YES
kft_kn int(11) YES
kft_kc int(11) YES
tar_kn double(9,2) YES
tar_kc double(9,2) YES
summa_kn int(11) YES
summa_kc int(11) YES
penya_k double(10,2) YES
komiss_k double(10,2) YES
proc int(4) YES
razn_rn int(11) YES
razn_rc int(11) YES
kft_rn double(10,5) YES
kft_rc double(10,5) YES
tar_rn double(10,2) YES
tar_rc double(10,2) YES
summa_rn double(10,2) YES
summa_rc int(16) YES
penya_r double(10,2) YES
date_r date YES MUL
primechanie varchar(64) YES
norma int(11) YES
familiya varchar(64) YES
cod_opl int(8) YES
prpen int(4) YES
date_vd date YES
time_vd varchar(0) YES
reg_nom varchar(64) YES
vyp_doh int(11) YES
no int(11) YES
raznpen int(11) YES
del int(1) YES MUL
base varchar(16) YES MUL


Запросы работают ну очень медленно...что посоветуете спецы

Запросами мне нужно выбрать всех абонентов из картаб с полями lic_sch data_kon date_kon base askue
по этим лицевым счетам выбрать абонентов из картвгд по последней оплате yearmon с полями lic_sch data_new yearmon



Естественно тут пакетами не обойтись.....

Запрос1
Код: sql
1.
2.
3.
4.
5.
6.
 CREATE TEMPORARY TABLE `t1`
select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
GROUP BY kartkvgd.lic_sch;


Запрос2
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TEMPORARY TABLE `t2`
select t1.yearmon,
         t1.lic_sch,
        kartkvgd.data_new
from 
t1 left join kartkvgd
on t1.lic_sch=kartkvgd.lic_sch;


Запрос3
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select t2.yearmon,
         t2.lic_sch,
         t2.kartkvgd,
         kartab.lic_sch,
         kartab.data_kon,
         kartab.date_kon,
         kartab.base,
         kartab.askue   
from 
kartab left join t2
on kartab.lic_sch=t2.lic_sch;


Запросы выполняются ну очень медленно
Посоветуйте как оптимизировать ?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207323
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7как оптимизировать ?
Как минимум - создать необходимые индексы. Вероятно, собрать всё в один запрос. Вероятно - понять, какого хрена надо тянуть весь этот массив данных на клиента.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207334
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinaolegon7как оптимизировать ?
Как минимум - создать необходимые индексы. Вероятно, собрать всё в один запрос. Вероятно - понять, какого хрена надо тянуть весь этот массив данных на клиента.

Я за субд не отвечаю
индексы сделаны ....в описании таблиц указано по каким полям...

Вложенные запросы быстрее выполнятся?

Тянуть массив этот надо для последующей его обработки.... уже функциями 1с , создание отчетов и т д.

У меня конкретно по структуре таблиц... как можно оптимизировать
и по моим запросам.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207393
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВероятно, собрать всё в один запрос.Вот, да, это просится больше всего.
Сейчас t2 является ведомой таблицей, однако по ней индексов нет. В итоге поиск записи в ней может происходит только полным сканированием таблицы.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207403
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7индексы сделаны ....в описании таблиц указано по каким полям...Не указано.
Да и вообще это не описание структуры, а хрень собачья.

olegon7Вложенные запросы быстрее выполнятся?
Ну уж во всяком случае не медленнее. Тем более по сравнению с временными таблицами на дисковом движке.

olegon7по структуре таблиц... как можно оптимизировать
Интересно, зачем тебе это? особенно с учётом того, что
olegon7Я за субд не отвечаю
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207476
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olegon7по структуре таблиц... как можно оптимизировать
Интересно, зачем тебе это? особенно с учётом того, что
olegon7Я за субд не отвечаю[/quot]

парень который отвечает за mysql я так понимаю тоже новичок

а решаем общую задачу вот и спрашиваю
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207478
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Akina]olegon7индексы сделаны ....в описании таблиц указано по каким полям...Не указано.
Да и вообще это не описание структуры, а хрень собачья.


Использовал команду
DESCRIBE tablename;
SHOW TABLE STATUS;

для просмотра структуры
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207485
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А надо было SHOW CREATE TABLE. Причём из консоли копипаст сюда. И обернуть тегом SRC=SQL.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207508
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так нагляднее

Структура Таблицы kartkvgd
fieldtypenullkeydefaultextraidint(10) unsignedNOPRIauto_incrementlic_schvarchar(16)YESMULpachkavarchar(10)YESyearmondateYESMULerrint(1)YESerrsumint(11)YESkoint(4)YESdata_oldint(11)YESdata_newint(11)YESrazn_knint(11)YESrazn_kcint(11)YESkft_knint(11)YESkft_kcint(11)YEStar_kndouble(9,2)YEStar_kcdouble(9,2)YESsumma_knint(11)YESsumma_kcint(11)YESpenya_kdouble(10,2)YESkomiss_kdouble(10,2)YESprocint(4)YESrazn_rnint(11)YESrazn_rcint(11)YESkft_rndouble(10,5)YESkft_rcdouble(10,5)YEStar_rndouble(10,2)YEStar_rcdouble(10,2)YESsumma_rndouble(10,2)YESsumma_rcint(16)YESpenya_rdouble(10,2)YESdate_rdateYESMULprimechanievarchar(64)YESnormaint(11)YESfamiliyavarchar(64)YEScod_oplint(8)YESprpenint(4)YESdate_vddateYEStime_vdvarchar(0)YESreg_nomvarchar(64)YESvyp_dohint(11)YESnoint(11)YESraznpenint(11)YESdelint(1)YESMULbasevarchar(16)YESMUL

Структура Таблицы kartab

fieldtypenullkeydefaultextraidint(10) unsignedNOPRIauto_incrementlic_schvarchar(16)NOPRIfamvarchar(64)YESnamevarchar(64)YESotchvarchar(64)YEScod_tnvarchar(8)YEScod_stvarchar(8)YEShomevarchar(10)YESkvvarchar(10)YESkomint(5)YESchlenovint(5)YEStelefvarchar(16)YEScod_katvarchar(16)YEScod_tprvarchar(16)YESschlampint(1)YESrabotint(1)YESshifrvarchar(15)YEScod_pdvarchar(10)YESkomentvarchar(128)YESplitint(1)YESyearmondateYESerrsumint(11)YESerrsumnint(11)YESsumma_knint(11)YESsumma_kcint(11)YEScod_convarchar(16)YESsredneeint(11)YESmesyacint(11)YESdate_otkpldateYESdate_otkfkdateYESnomer_tpvarchar(16)YESfidervarchar(11)YESnomer_oporvarchar(16)YESsmenavarchar(16)YESdata_konint(11)YESdate_kondateYESfamiliyavarchar(64)YESpr_oplvarchar(8)YESaktint(4)YEScod_predvarchar(8)YESdate_zapdateYESlgotavarchar(4)YESprocentvarchar(11)YESdate_dogdateYEScod_ispvarchar(8)YESrachpokint(10)YESpokazanieint(11)YESdkontdecimal(7,2)YESdate_rdateYESdate_lgtdateYESreg_nomvarchar(16)YEScod_tpvarchar(6)YESdate_prdateYESpriravnint(6)YESdogvarchar(8)YESpenya_tint(11)YESaskueint(1)YESsumma_vdint(16)YEScod_vidint(4)YESlg_kvtint(11)YESerrsumvint(11)YESkvt_mesint(11)YESsumma_mesint(16)YESold_lgtint(1)YESdetiint(1)YESpr_eripint(1)YEScod_algvarchar(11)YESn_schvarchar(32)YESMULcod_tschvarchar(16)YESMULfider_codevarchar(32)YEStp_codevarchar(32)YESline_codevarchar(32)YESdelint(1)YESbasevarchar(16)YESMUL
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207517
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7Так нагляднее
Муж, упорный в своих намерениях? ну тоже позиция, чё...
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207522
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7Так нагляднееПоля-то нагляднее, а вот остальная часть информации так и осталась "за кадром".
В т.ч. индексы, движки таблиц, счетчики автоинкрементов.

Кстати, безотносительно вопроса топика - удивляют старательно расставленные разные числа у типа INT. Хотя они ни на что не влияют, диапазон значений и размер при хранении от этого не меняются.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207529
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinaolegon7Так нагляднее
Муж, упорный в своих намерениях? ну тоже позиция, чё...

сейчас , таблица kartab
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
kartab	CREATE TABLE `kartab` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lic_sch` varchar(16) NOT NULL DEFAULT '',
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `cod_tn` varchar(8) DEFAULT NULL,
  `cod_st` varchar(8) DEFAULT NULL,
  `home` varchar(10) DEFAULT NULL,
  `kv` varchar(10) DEFAULT NULL,
  `kom` int(5) DEFAULT NULL,
  `chlenov` int(5) DEFAULT NULL,
  `telef` varchar(16) DEFAULT NULL,
  `cod_kat` varchar(16) DEFAULT NULL,
  `cod_tpr` varchar(16) DEFAULT NULL,
  `schlamp` int(1) DEFAULT NULL,
  `rabot` int(1) DEFAULT NULL,
  `shifr` varchar(15) DEFAULT NULL,
  `cod_pd` varchar(10) DEFAULT NULL,
  `koment` varchar(128) DEFAULT NULL,
  `plit` int(1) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `errsum` int(11) DEFAULT NULL,
  `errsumn` int(11) DEFAULT NULL,
  `summa_kn` int(11) DEFAULT NULL,
  `summa_kc` int(11) DEFAULT NULL,
  `cod_con` varchar(16) DEFAULT NULL,
  `srednee` int(11) DEFAULT NULL,
  `mesyac` int(11) DEFAULT NULL,
  `date_otkpl` date DEFAULT NULL,
  `date_otkfk` date DEFAULT NULL,
  `nomer_tp` varchar(16) DEFAULT NULL,
  `fider` varchar(11) DEFAULT NULL,
  `nomer_opor` varchar(16) DEFAULT NULL,
  `smena` varchar(16) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `familiya` varchar(64) DEFAULT NULL,
  `pr_opl` varchar(8) DEFAULT NULL,
  `akt` int(4) DEFAULT NULL,
  `cod_pred` varchar(8) DEFAULT NULL,
  `date_zap` date DEFAULT NULL,
  `lgota` varchar(4) DEFAULT NULL,
  `procent` varchar(11) DEFAULT NULL,
  `date_dog` date DEFAULT NULL,
  `cod_isp` varchar(8) DEFAULT NULL,
  `rachpok` int(10) DEFAULT NULL,
  `pokazanie` int(11) DEFAULT NULL,
  `dkont` decimal(7,2) DEFAULT NULL,
  `date_r` date DEFAULT NULL,
  `date_lgt` date DEFAULT NULL,
  `reg_nom` varchar(16) DEFAULT NULL,
  `cod_tp` varchar(6) DEFAULT NULL,
  `date_pr` date DEFAULT NULL,
  `priravn` int(6) DEFAULT NULL,
  `dog` varchar(8) DEFAULT NULL,
  `penya_t` int(11) DEFAULT NULL,
  `askue` int(1) DEFAULT NULL,
  `summa_vd` int(16) DEFAULT NULL,
  `cod_vid` int(4) DEFAULT NULL,
  `lg_kvt` int(11) DEFAULT NULL,
  `errsumv` int(11) DEFAULT NULL,
  `kvt_mes` int(11) DEFAULT NULL,
  `summa_mes` int(16) DEFAULT NULL,
  `old_lgt` int(1) DEFAULT NULL,
  `deti` int(1) DEFAULT NULL,
  `pr_erip` int(1) DEFAULT NULL,
  `cod_alg` varchar(11) DEFAULT NULL,
  `n_sch` varchar(32) DEFAULT NULL,
  `cod_tsch` varchar(16) DEFAULT NULL,
  `fider_code` varchar(32) DEFAULT NULL,
  `tp_code` varchar(32) DEFAULT NULL,
  `line_code` varchar(32) DEFAULT NULL,
  `del` int(1) DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`,`lic_sch`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `lic_sch` (`lic_sch`) USING BTREE,
  KEY `base` (`base`),
  KEY `n_tsch` (`n_sch`),
  KEY `cod_tsch` (`cod_tsch`)
) ENGINE=MyISAM AUTO_INCREMENT=536243 DEFAULT CHARSET=utf8



сейчас , таблица kartkvgd
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
kartkvgd	CREATE TABLE `kartkvgd` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lic_sch` varchar(16) DEFAULT NULL,
  `pachka` varchar(10) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `err` int(1) DEFAULT NULL,
  `errsum` int(11) DEFAULT NULL,
  `ko` int(4) DEFAULT NULL,
  `data_old` int(11) DEFAULT NULL,
  `data_new` int(11) DEFAULT NULL,
  `razn_kn` int(11) DEFAULT NULL,
  `razn_kc` int(11) DEFAULT NULL,
  `kft_kn` int(11) DEFAULT NULL,
  `kft_kc` int(11) DEFAULT NULL,
  `tar_kn` double(9,2) DEFAULT NULL,
  `tar_kc` double(9,2) DEFAULT NULL,
  `summa_kn` int(11) DEFAULT NULL,
  `summa_kc` int(11) DEFAULT NULL,
  `penya_k` double(10,2) DEFAULT NULL,
  `komiss_k` double(10,2) DEFAULT NULL,
  `proc` int(4) DEFAULT NULL,
  `razn_rn` int(11) DEFAULT NULL,
  `razn_rc` int(11) DEFAULT NULL,
  `kft_rn` double(10,5) DEFAULT NULL,
  `kft_rc` double(10,5) DEFAULT NULL,
  `tar_rn` double(10,2) DEFAULT NULL,
  `tar_rc` double(10,2) DEFAULT NULL,
  `summa_rn` double(10,2) DEFAULT NULL,
  `summa_rc` int(16) DEFAULT NULL,
  `penya_r` double(10,2) DEFAULT NULL,
  `date_r` date DEFAULT NULL,
  `primechanie` varchar(64) DEFAULT NULL,
  `norma` int(11) DEFAULT NULL,
  `familiya` varchar(64) DEFAULT NULL,
  `cod_opl` int(8) DEFAULT NULL,
  `prpen` int(4) DEFAULT NULL,
  `date_vd` date DEFAULT NULL,
  `time_vd` varchar(0) DEFAULT NULL,
  `reg_nom` varchar(64) DEFAULT NULL,
  `vyp_doh` int(11) DEFAULT NULL,
  `no` int(11) DEFAULT NULL,
  `raznpen` int(11) DEFAULT NULL,
  `del` int(1) DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `lic_sch` (`lic_sch`),
  KEY `base` (`base`),
  KEY `date_r` (`date_r`),
  KEY `del` (`del`) USING BTREE,
  KEY `yearmon` (`yearmon`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=29872212 DEFAULT CHARSET=utf8
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207532
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
запрос3
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select t2.yearmon,
t2.lic_sch,
t2.data_new,
kartab.lic_sch,
kartab.data_kon,
kartab.date_kon,
kartab.base,
kartab.askue 
from 
kartab left join t2
on kartab.lic_sch=t2.lic_sch


опечатался
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207542
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE `kartab` (
-- skipped
  PRIMARY KEY (`id`,`lic_sch`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `lic_sch` (`lic_sch`) USING BTREE,
-- skipped


Код: sql
1.
2.
3.
4.
5.
CREATE TABLE `kartkvgd` (
-- skipped
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
-- skipped


Мда-с... гениальненько... ну да хрен с им.

На описанной структуре по запросам:
Во втором запросе заменить левое связывание на внутреннее.
Объединить все запросы в один.

И сильно подумать - зачем данные разных уровней группировки получать в одном наборе записей. Скорее всего, более целесообразно получить от сервера два набора - отдельно MAX(kartkvgd.yearmon) и kartkvgd.lic_sch, отдельно всё остальное.

И ещё более сильно подумать на предмет того, какой смысл волочь в 1С все 12кк записей для обработки, когда можно их обработать на MySQL и выдать в 1С уже обобщённые данные.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207560
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
первый запрос
возвращает всех абонентов(лицевые счета) с максимальной датой оплаты.
еще забыл надо вставить условие del=0
т.е . неудаленные записи
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TEMPORARY TABLE `t1`
select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
GROUP BY kartkvgd.lic_sch
where del=0;


почему во втором запросе нужно испольльзовать внутреннее?
мне ведь нужны все лицевые счета из первого запроса

Получился вот такой запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select t2.yearmon,
t2.lic_sch,
t2.data_new,
kartab.lic_sch,
kartab.data_kon,
kartab.date_kon,
kartab.base,
kartab.askue 
from 
kartab left join (select t1.yearmon,
t1.lic_sch,
kartkvgd.data_new
from 
(select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
GROUP BY kartkvgd.lic_sch
where kartkvgd.del=0) t1 left join kartkvgd
on t1.lic_sch=kartkvgd.lic_sch) t2
on kartab.lic_sch=t2.lic_sch
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207581
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/src][/quot]


И ещё более сильно подумать на предмет того, какой смысл волочь в 1С все 12кк записей для обработки, когда можно их обработать на MySQL и выдать в 1С уже обобщённые данные.[/quot]

Смысл в чем, раз в месяц я получаю данные из mysql
записываю себе в 1 с
делаю всевозможные проверки....
еще один источник данных - это сторонний http сервис - оттуда я тоже буду получать данные и клеить с полученными из mysql...
делаю всевозможные отчеты для анализа данных..
делаю приложение , которое доступно всем пользователям в том числе через web интерфейс
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207604
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема осталась
запрос больше часа выполняется...
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207614
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7почему во втором запросе нужно использовать внутреннее?
НУ сам подумай. Есть таблица. Ты из неё отобрал часть записей. Может ли в отобранной части присутствовать запись, отсутствующая в исходной таблице?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207624
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

ты прав

но запрос все равно долго выполняется

может надо в структуре что-то поменять
ничего что поле lic_sch строка и по ней индекс ?
а это поле участвует у меня в соединениях?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207626
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос такой получился

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select t2.yearmon,
t2.lic_sch,
t2.data_new,
kartab.lic_sch,
kartab.data_kon,
kartab.date_kon,
kartab.base,
kartab.askue 
from 
kartab left join (select t1.yearmon,
t1.lic_sch,
kartkvgd.data_new
from 
(select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
where kartkvgd.del=0
GROUP BY kartkvgd.lic_sch) t1 INNER JOIN kartkvgd
on t1.lic_sch=kartkvgd.lic_sch) t2
on kartab.lic_sch=t2.lic_sch
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207645
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7ничего что поле lic_sch строка и по ней индекс ?
а это поле участвует у меня в соединениях?
Без индекса было бы совсем тухло.

olegon7может надо в структуре что-то поменять
Ну вообще-то надо. Даже без комментариев, в каком поле что хранится, ясно, что "архитектор" этой БД даже не слышал о существовании нормальных форм.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207722
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

если создать таблицу лицевые счета

содержащая поля

lic_sch(строка) и id_lic_sch (число)


а в таблицы kartab и kartkvgd добавить поле id_lic_sch ?

запрос быстрее выполнятся будет?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207728
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olegon7Akina,

если создать таблицу лицевые счета

содержащая поля

lic_sch(строка) и id_lic_sch (число)


а в таблицы kartab и kartkvgd добавить поле id_lic_sch ?

запрос быстрее выполнятся будет?

и проиндексировать по id_lic_sch
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39207779
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7запрос быстрее выполнятся будет?
Ненамного.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208010
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итоговый запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select t2.yearmon,
t2.lic_sch,
t2.data_new,
kartab.lic_sch,
kartab.data_kon,
kartab.date_kon,
kartab.base,
kartab.askue 
from 
kartab left join (select t1.yearmon,
t1.lic_sch,
kartkvgd.data_new
from 
(select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
where kartkvgd.del=0
GROUP BY kartkvgd.lic_sch) t1 inner join kartkvgd
on t1.lic_sch=kartkvgd.lic_sch) t2
on kartab.lic_sch=t2.lic_sch
where kartab.del=0



оставил запрос на выполнение вернул ошибку [Err] 1317 - Query execution was interrupted
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208147
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
from 
kartab left join (select t1.yearmon,
t1.lic_sch,
kartkvgd.data_new
from 
(select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
where kartkvgd.del=0
GROUP BY kartkvgd.lic_sch) t1 inner join kartkvgd
on t1.lic_sch=kartkvgd.lic_sch) t2
on kartab.lic_sch=t2.lic_sch
where kartab.del=0

жесть адовая... а если так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 ...
 ,(select max(yearmon) from kartkvgd where lic_sch=k.lic_sch) as yearmon
from 
kartab k
left join kartkvgd g on l.lic_sch=g.lic_sch
where k.del=0

А лучше покажите explain этого запроса здесь.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208150
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык у него нету индекса kartkvgd(lic_sch, yearmon), всё одно тухло будет. И в среднем по 23 записи в группе...
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208384
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

новые таблички они поменьше будут

картаб_аскуэ

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
kartab_askue	CREATE TABLE `kartab_askue` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lic_sch` varchar(16) NOT NULL DEFAULT '',
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `cod_tn` varchar(8) DEFAULT NULL,
  `cod_st` varchar(8) DEFAULT NULL,
  `home` varchar(10) DEFAULT NULL,
  `kv` varchar(10) DEFAULT NULL,
  `kom` int(5) DEFAULT NULL,
  `chlenov` int(5) DEFAULT NULL,
  `telef` varchar(16) DEFAULT NULL,
  `cod_kat` varchar(16) DEFAULT NULL,
  `cod_tpr` varchar(16) DEFAULT NULL,
  `schlamp` int(1) DEFAULT NULL,
  `rabot` int(1) DEFAULT NULL,
  `shifr` varchar(15) DEFAULT NULL,
  `cod_pd` varchar(10) DEFAULT NULL,
  `koment` varchar(128) DEFAULT NULL,
  `plit` int(1) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `errsum` int(11) DEFAULT NULL,
  `errsumn` int(11) DEFAULT NULL,
  `summa_kn` int(11) DEFAULT NULL,
  `summa_kc` int(11) DEFAULT NULL,
  `cod_con` varchar(16) DEFAULT NULL,
  `srednee` int(11) DEFAULT NULL,
  `mesyac` int(11) DEFAULT NULL,
  `date_otkpl` date DEFAULT NULL,
  `date_otkfk` date DEFAULT NULL,
  `nomer_tp` varchar(16) DEFAULT NULL,
  `fider` varchar(11) DEFAULT NULL,
  `nomer_opor` varchar(16) DEFAULT NULL,
  `smena` varchar(16) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `familiya` varchar(64) DEFAULT NULL,
  `pr_opl` varchar(8) DEFAULT NULL,
  `akt` int(4) DEFAULT NULL,
  `cod_pred` varchar(8) DEFAULT NULL,
  `date_zap` date DEFAULT NULL,
  `lgota` varchar(4) DEFAULT NULL,
  `procent` varchar(11) DEFAULT NULL,
  `date_dog` date DEFAULT NULL,
  `cod_isp` varchar(8) DEFAULT NULL,
  `rachpok` int(10) DEFAULT NULL,
  `pokazanie` int(11) DEFAULT NULL,
  `dkont` decimal(7,2) DEFAULT NULL,
  `date_r` date DEFAULT NULL,
  `date_lgt` date DEFAULT NULL,
  `reg_nom` varchar(16) DEFAULT NULL,
  `cod_tp` varchar(6) DEFAULT NULL,
  `date_pr` date DEFAULT NULL,
  `priravn` int(6) DEFAULT NULL,
  `dog` varchar(8) DEFAULT NULL,
  `penya_t` int(11) DEFAULT NULL,
  `askue` int(1) DEFAULT NULL,
  `summa_vd` int(16) DEFAULT NULL,
  `cod_vid` int(4) DEFAULT NULL,
  `lg_kvt` int(11) DEFAULT NULL,
  `errsumv` int(11) DEFAULT NULL,
  `kvt_mes` int(11) DEFAULT NULL,
  `summa_mes` int(16) DEFAULT NULL,
  `old_lgt` int(1) DEFAULT NULL,
  `deti` int(1) DEFAULT NULL,
  `pr_erip` int(1) DEFAULT NULL,
  `cod_alg` varchar(11) DEFAULT NULL,
  `n_sch` varchar(32) DEFAULT NULL,
  `cod_tsch` varchar(16) DEFAULT NULL,
  `fider_code` varchar(32) DEFAULT NULL,
  `tp_code` varchar(32) DEFAULT NULL,
  `line_code` varchar(32) DEFAULT NULL,
  `del` int(1) DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`,`lic_sch`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `lic_sch` (`lic_sch`) USING BTREE,
  KEY `base` (`base`),
  KEY `n_tsch` (`n_sch`),
  KEY `cod_tsch` (`cod_tsch`)
) ENGINE=MyISAM AUTO_INCREMENT=48438 DEFAULT CHARSET=utf8





таблица картквгд_аскуэ

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
kartab_askue	CREATE TABLE `kartab_askue` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `lic_sch` varchar(16) NOT NULL DEFAULT '',
  `fam` varchar(64) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL,
  `otch` varchar(64) DEFAULT NULL,
  `cod_tn` varchar(8) DEFAULT NULL,
  `cod_st` varchar(8) DEFAULT NULL,
  `home` varchar(10) DEFAULT NULL,
  `kv` varchar(10) DEFAULT NULL,
  `kom` int(5) DEFAULT NULL,
  `chlenov` int(5) DEFAULT NULL,
  `telef` varchar(16) DEFAULT NULL,
  `cod_kat` varchar(16) DEFAULT NULL,
  `cod_tpr` varchar(16) DEFAULT NULL,
  `schlamp` int(1) DEFAULT NULL,
  `rabot` int(1) DEFAULT NULL,
  `shifr` varchar(15) DEFAULT NULL,
  `cod_pd` varchar(10) DEFAULT NULL,
  `koment` varchar(128) DEFAULT NULL,
  `plit` int(1) DEFAULT NULL,
  `yearmon` date DEFAULT NULL,
  `errsum` int(11) DEFAULT NULL,
  `errsumn` int(11) DEFAULT NULL,
  `summa_kn` int(11) DEFAULT NULL,
  `summa_kc` int(11) DEFAULT NULL,
  `cod_con` varchar(16) DEFAULT NULL,
  `srednee` int(11) DEFAULT NULL,
  `mesyac` int(11) DEFAULT NULL,
  `date_otkpl` date DEFAULT NULL,
  `date_otkfk` date DEFAULT NULL,
  `nomer_tp` varchar(16) DEFAULT NULL,
  `fider` varchar(11) DEFAULT NULL,
  `nomer_opor` varchar(16) DEFAULT NULL,
  `smena` varchar(16) DEFAULT NULL,
  `data_kon` int(11) DEFAULT NULL,
  `date_kon` date DEFAULT NULL,
  `familiya` varchar(64) DEFAULT NULL,
  `pr_opl` varchar(8) DEFAULT NULL,
  `akt` int(4) DEFAULT NULL,
  `cod_pred` varchar(8) DEFAULT NULL,
  `date_zap` date DEFAULT NULL,
  `lgota` varchar(4) DEFAULT NULL,
  `procent` varchar(11) DEFAULT NULL,
  `date_dog` date DEFAULT NULL,
  `cod_isp` varchar(8) DEFAULT NULL,
  `rachpok` int(10) DEFAULT NULL,
  `pokazanie` int(11) DEFAULT NULL,
  `dkont` decimal(7,2) DEFAULT NULL,
  `date_r` date DEFAULT NULL,
  `date_lgt` date DEFAULT NULL,
  `reg_nom` varchar(16) DEFAULT NULL,
  `cod_tp` varchar(6) DEFAULT NULL,
  `date_pr` date DEFAULT NULL,
  `priravn` int(6) DEFAULT NULL,
  `dog` varchar(8) DEFAULT NULL,
  `penya_t` int(11) DEFAULT NULL,
  `askue` int(1) DEFAULT NULL,
  `summa_vd` int(16) DEFAULT NULL,
  `cod_vid` int(4) DEFAULT NULL,
  `lg_kvt` int(11) DEFAULT NULL,
  `errsumv` int(11) DEFAULT NULL,
  `kvt_mes` int(11) DEFAULT NULL,
  `summa_mes` int(16) DEFAULT NULL,
  `old_lgt` int(1) DEFAULT NULL,
  `deti` int(1) DEFAULT NULL,
  `pr_erip` int(1) DEFAULT NULL,
  `cod_alg` varchar(11) DEFAULT NULL,
  `n_sch` varchar(32) DEFAULT NULL,
  `cod_tsch` varchar(16) DEFAULT NULL,
  `fider_code` varchar(32) DEFAULT NULL,
  `tp_code` varchar(32) DEFAULT NULL,
  `line_code` varchar(32) DEFAULT NULL,
  `del` int(1) DEFAULT NULL,
  `base` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`,`lic_sch`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `lic_sch` (`lic_sch`) USING BTREE,
  KEY `base` (`base`),
  KEY `n_tsch` (`n_sch`),
  KEY `cod_tsch` (`cod_tsch`)
) ENGINE=MyISAM AUTO_INCREMENT=48438 DEFAULT CHARSET=utf8
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208387
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
новый запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select t2.yearmon,
t2.lic_sch,
t2.data_new,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
kartab_askue.askue 
from 
kartab_askue left join (select t1.yearmon,
t1.lic_sch,
kartkvgd_askue.data_new
from 
(select MAX(kartkvgd_askue.yearmon) yearmon,
kartkvgd_askue.lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) t1 inner join kartkvgd_askue
on t1.lic_sch=kartkvgd_askue.lic_sch) t2
on kartab_askue.lic_sch=t2.lic_sch
where kartab_askue.del=0
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208388
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
через explain

Код: sql
1.
2.
3.
4.
5.
1	PRIMARY	kartab_askue	ALL					48437	Using where
1	PRIMARY	<derived2>	ALL					117982	
2	DERIVED	<derived3>	ALL					44534	
2	DERIVED	kartkvgd_askue	ref	lic_sch	lic_sch	51	t1.lic_sch	10	Using where
3	DERIVED	kartkvgd_askue	ALL	del				117982	Using where; Using temporary; Using filesort
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208436
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirolegon7
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
from 
kartab left join (select t1.yearmon,
t1.lic_sch,
kartkvgd.data_new
from 
(select MAX(kartkvgd.yearmon) yearmon,
kartkvgd.lic_sch
from 
kartkvgd
where kartkvgd.del=0
GROUP BY kartkvgd.lic_sch) t1 inner join kartkvgd
on t1.lic_sch=kartkvgd.lic_sch) t2
on kartab.lic_sch=t2.lic_sch
where kartab.del=0

жесть адовая... а если так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
select
 ...
 ,(select max(yearmon) from kartkvgd where lic_sch=k.lic_sch) as yearmon
from 
kartab k
left join kartkvgd g on l.lic_sch=g.lic_sch
where k.del=0

А лучше покажите explain этого запроса здесь.

хорошо а как вытянуть остальные поля таблицы karkvgd такие как data_new?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208480
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

написал запрос по вашей рекомендации

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
(select max(yearmon) from kartkvgd_askue where lic_sch=kartkvgd_askue.lic_sch) as yearmon
from 
kartab_askue 
left join kartkvgd_askue  on kartab_askue.lic_sch=kartkvgd_askue.lic_sch
where kartab_askue.del=0



запрос конечно выполнился быстрее
Но во-первых он дублирует записи
лицевой счет должен быть уникальным (в картабе он уникальный)
во-вторых как вытащить поле data_new
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208874
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам для каждого счёта надо выбрать последнюю дату и относящееся к ней значение data_new?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
(select yearmon from kartkvgd_askue where lic_sch=kartkvgd_askue.lic_sch order by yearmon desc limit 1) as yearmon,
(select data_new from kartkvgd_askue where lic_sch=kartkvgd_askue.lic_sch order by yearmon desc limit 1) as data_new
from 
kartab_askue 
left join kartkvgd_askue  on kartab_askue.lic_sch=kartkvgd_askue.lic_sch
where kartab_askue.del=0

И сделайте всё-таки индекс на (lic_sch,yearmon), если есть возможность.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208909
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,
Для каждого счета последнюю оплату , но учитывайте что последние оплаты для каждого счета разные, и привязанную к ней оплату data_new. И еще в картабе хранятся lic_sch уникальные а в картвгд нет, т е по сути там хранятся оплаты абонентов за 3 года!
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39208910
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7но учитывайте чтоНу кагбэ вчитайтесь в запрос, там это учтено. Правда, если у вас в "последнюю" дату могут быть две оплаты , то ой.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209815
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

запрос вернул более 120 тыс ,что удивительно все записи ермон одинаковые(такого быть не может что бы все лплатитлт в один день)!
хотя в картабе 50 тыс
это говорит о том что соединять надо не только по лиц счету а и по дате ермон...поэтому исправляю
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
(select yearmon from kartkvgd_askue where lic_sch=kartkvgd_askue.lic_sch AND yearmon=kartkvgd_askue.yearmon order by yearmon desc limit 1) as yearmon,
(select data_new from kartkvgd_askue where lic_sch=kartkvgd_askue.lic_sch AND yearmon=kartkvgd_askue.yearmon order by yearmon desc limit 1) as data_new
from 
kartab_askue 
left join kartkvgd_askue  on kartab_askue.lic_sch=kartkvgd_askue.lic_sch
where kartab_askue.del=0


В запросе все равно что не так поля yearmon и data_new заполнены одинаковыми значениями, хотя должны быть разные
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209859
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7В запросе все равно что не так поля yearmon и data_new заполнены одинаковыми значениямитак потому что берутся они из одной и той же записи Глаз у меня замылился, когда писал, а вы, похоже, вообще не поняли, что запрос делает.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base,
(select yearmon from kartkvgd_askue where lic_sch=kartab_askue.lic_sch order by yearmon desc limit 1) as yearmon,
(select data_new from kartkvgd_askue where lic_sch=kartab_askue.lic_sch order by yearmon desc limit 1) as data_new
from 
kartab_askue 
where kartab_askue.del=0

Ну и olegon7запрос вернул более 120 тыс потому что в нём оставался уже ненужный джойн с картквгд. Странно, что больше не вернул.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209861
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select t2.yearmon,
t2.lic_sch,
t2.data_new,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base 
from 
kartab_askue RIGHT JOIN (select t1.yearmon,
t1.lic_sch,
kartkvgd_askue.data_new
from 
(select MAX(kartkvgd_askue.yearmon) yearmon,
kartkvgd_askue.lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) t1 inner join kartkvgd_askue
on t1.lic_sch=kartkvgd_askue.lic_sch and t1.yearmon=kartkvgd_askue.yearmon) t2
on kartab_askue.lic_sch=t2.lic_sch
where kartab_askue.del=0



этот запрос выполняется за 9 секунд
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209888
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

вы когда так соединяете вы получаете избыточные записи
Код: sql
1.
select yearmon from kartkvgd_askue where lic_sch=kartab_askue.lic_sch order by yearmon desc limit 1



я жк писал lic_sch уникален в картаб но не в картвгд! поэтому соединять надо еще и по ермону

и тогда строить индекс составной lic_sch_ya_yearmon
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209913
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7вы когда так соединяете вы получаете избыточные записииногда лучше жевать, чем говорить (с)
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209915
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7и тогда строить индекс составной lic_sch_ya_yearmonАкина вам это уже предлагал.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209935
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

еще один написал запрос он куда проще
и выполняется быстрее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select t1.yearmon,
t1.lic_sch,
t1.data_new,
kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base
from 
kartab_askue RIGHT JOIN (select kartkvgd_askue.yearmon,
kartkvgd_askue.lic_sch,
kartkvgd_askue.data_new
from 
kartkvgd_askue
where kartkvgd_askue.del=0
and kartkvgd_askue.yearmon BETWEEN "2016-02-01" and "2016-02-31")t1
 
on kartab_askue.lic_sch=t1.lic_sch
where kartab_askue.del=0
ORDER BY t1.lic_sch
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209939
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и тогда учитываются даже те записи когда ермон повторяется

уважаемый tanglir
объяните почему правое соединение быстрее работает чем левое
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209953
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7,

при левом соединении сервер идёт по таблице лиц.счетов и ищет каждому соответствие в результате подзапроса. Поскольку на этом результате нет индексов, скорость немного предсказуема.
Ваш правый джойн есть не что иное как внутренний джойн (читать секцию where до просветления). Тут сервер имеет право выбирать, какой набор дынных делать ведущим, и естественно выбирает ведущим подзапрос. При этом поиск в таблице счетов производится по индексу, что, очевидно, на порядки быстрее, чем в предыдущем варианте. Впрочем, даже если бы это был честный правый джойн, результат остался бы тем же - скан подзапроса, поиск в счетах по индексу.
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39209958
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ. У счёта может быть максимум одна операция оплаты за календарный месяц?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39210104
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

ну сне все таки надо делать левое соединение
т. е . ведущая таблица картаб - должны все записи попасть , из картвдг только те которые совпадают по лиц счету
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39210132
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как сделать запрос что бы скорость была бы такой же но при этом ведущая таблица была бы картаб,
я так понимаю проиндексировать
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39210320
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

написал запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SELECT t3.lic_sch,
t3.data_kon,
t3.date_kon,
t3.base,
t2.lic_sch,
t2.data_new,
t2.yearmon 
from
(SELECT kartab_askue.lic_sch,
kartab_askue.data_kon,
kartab_askue.date_kon,
kartab_askue.base 
from kartab_askue where kartab_askue.del=0) As t3 LEFT OUTER JOIN
(select t1.yearmon,
t1.lic_sch,
kartkvgd_askue.data_new
from 
(select MAX(kartkvgd_askue.yearmon) yearmon,
kartkvgd_askue.lic_sch
from 
kartkvgd_askue
where kartkvgd_askue.del=0
GROUP BY kartkvgd_askue.lic_sch) t1 inner join kartkvgd_askue
on t1.lic_sch=kartkvgd_askue.lic_sch and t1.yearmon=kartkvgd_askue.yearmon ) As t2
ON t3.lic_sch=t2.lic_sch



по сути добавил еще один вложенный(таблица картаб т3) чтобы проиндексировалась.
но запрос все равно выполняется долговато - 25 минут(
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39210714
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

могу ли я этот запрос разложить на подзапросы и запихнуть во вьюхи и сохранить на сервере?

а потом через 1 с главную вьюху вызывать?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39210920
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7,

с вью в мускле всё очень печально. Всё-таки чем вам этот 19026405 вариант не подошёл?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39211097
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

очень долго выполняется((( я так понимаю нужны индексы

я не админю мускл

не подскажите как правильно построить индексы составные

можно ли построить через navicat?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39211111
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот экплейн


Код: sql
1.
2.
3.
1	PRIMARY	kartab_askue	ALL	del				48437	Using where
3	DEPENDENT SUBQUERY	kartkvgd_askue	index	lic_sch	yearmon	4		1	Using where
2	DEPENDENT SUBQUERY	kartkvgd_askue	index	lic_sch	yearmon	4		1	Using where
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39211963
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7можно ли построить через navicat?если есть права, то можно создать через что угодно
гуглите alter table add index
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39212143
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

ваш запрос выполнялся 59548 секунд или 16 часов
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39212216
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olegon7,

но индекс построился?
...
Рейтинг: 0 / 0
Экспорт данных из Mysql в 1 c
    #39212525
olegon7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

скорее всего эту задачу будем делать на Postgre

там запрос в разы быстрее выполняется
...
Рейтинг: 0 / 0
56 сообщений из 56, показаны все 3 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Экспорт данных из Mysql в 1 c
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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