powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите выбрать самый быстрый вариант
10 сообщений из 35, страница 2 из 2
помогите выбрать самый быстрый вариант
    #38752552
Артем_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге получилось такое чудо:
Код: 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.
CREATE DEFINER = 'root'@'localhost' PROCEDURE `fixture_id`(
        _ut VARCHAR(50),
        _sport VARCHAR(50),
        _country VARCHAR(50),
        _template VARCHAR(50),
        _league  VARCHAR(50)
    )
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
	DECLARE inserted INT DEFAULT 0;
	DECLARE isset_id INT DEFAULT 0;
	
	SELECT id INTO isset_id FROM `fixtures` WHERE 
	`ut`= _ut and 
	`sport`= _sport and 
	`country`= _country and 
	`template`= _template and 
	`league`= _league 
	LIMIT 1;
	
	IF isset_id > 0 THEN
		SELECT isset_id 'id';
	ELSE
		INSERT INTO `fixtures` ( `ut`, `sport`, `country`, `template`, `tournament`, `league`, `status`) VALUES (_ut,_sport,_country,_template,'2014',_league,'Not started');
		SELECT LAST_INSERT_ID() INTO inserted;
		SELECT inserted 'id';
	END IF;
END;



но так как цикл большой, и в нем используется 5 вот таких процедур, процесс становится очень долгим. по полчаса проходит по циклу, в итоге обрубается из-за ограничения сервера.

Можно ли как-то оптимизировать код процедуры или запросы, чтобы быстрее работало?
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752583
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если судить по
Код: sql
1.
2.
SELECT LAST_INSERT_ID() INTO inserted;
		SELECT inserted 'id';


то нет ничего удивительного в долгом выполнении....
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752592
Артем_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяесли судить по
Код: sql
1.
2.
SELECT LAST_INSERT_ID() INTO inserted;
		SELECT inserted 'id';


то нет ничего удивительного в долгом выполнении....

а на что заменить? посоветуй плиз
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752606
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем_sql,

Сдается мне, что вообще всю эту процедуру можно заменить на один SQL-запрос вида INSERT ... ON DUPLICATE KEY UPDATE (См. комменты про LAST_INSERT_ID().)
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752733
Артем_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftАртем_sql,

Сдается мне, что вообще всю эту процедуру можно заменить на один SQL-запрос вида INSERT ... ON DUPLICATE KEY UPDATE (См. комменты про LAST_INSERT_ID().)

все началось именно с on duplicate key :D но в процессе я запутался и ушел в глубь.

Во всяком случае по времени выполнения первых 5 запросов видно, что процедуры работают быстрее:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
INSERT INTO `fixtures` (`ut`,`sport`,`country`,`template`,`league`,`tournament`,`status`) VALUES ('2014-09-20','Football','International','Euro 2016','Euro 2016','2014','Not started') ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID);
INSERT INTO `fixture_events` (`name`,`date`,`fixture_id`,`participants`,`visible`) VALUES ('Azerbaijan - Bulgaria','2014-09-09 15:00:00','1','a:2:{i:0;s:10:"Azerbaijan";i:1;s:8:"Bulgaria";}','1') ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID);
INSERT INTO `odds_groups` (`sport`,`caption`) VALUES ('Football','Win') ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID);
INSERT INTO `odds_types` (`group_id`,`caption`,`enabled`) VALUES ('1','%par1','1') ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID);
INSERT INTO `odds` (`partner_id`,`event_id`,`date`,`odds`,`type_id`,`enabled`,`margin`) VALUES ('1','1','2014-09-20 19:37:03','4.1','1','1','1.8') ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(ID);
в среднем - от 00.00.250 до  00.00.400 !

CALL fixture_id('2014-09-20','Football','International','Euro 2016','Euro 2016');
CALL event_id('Azerbaijan - Bulgaria','2014-09-09 15:00:00','1','a:2:{i:0;s:10:\"Azerbaijan\";i:1;s:8:\"Bulgaria\";}');
CALL group_id('Football','Win');
CALL type_id('1','%par1');
CALL save_odds('1','1','2014-09-20 19:36:48','4.1','1','1.8');
в среднем - от 00.00.650 до  00.01.250 !
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752736
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем_sqlВо всяком случае по времени выполнения первых 5 запросов видно, что процедуры работают быстрее:Если цифры - это время, то медленнее, насколько я вижу.
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752834
Артем_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftАртем_sqlВо всяком случае по времени выполнения первых 5 запросов видно, что процедуры работают быстрее:Если цифры - это время, то медленнее, насколько я вижу.

ой, я местами перепутал..:D
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38752840
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем_sqlвадяесли судить по
Код: sql
1.
2.
SELECT LAST_INSERT_ID() INTO inserted;
		SELECT inserted 'id';


то нет ничего удивительного в долгом выполнении....

а на что заменить? посоветуй плиз

Код: sql
1.
SELECT LAST_INSERT_ID() as `id`;



и есть подозрение, что ТС надо озвучить полную задачу, а не кусочки её решения, тогда может и будет предложено быстрое, правильное решение.
а так, по выше описанному, видно, что ТС не вполне владеет темой.
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38753477
Артем_sql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяАртем_sqlпропущено...


а на что заменить? посоветуй плиз

Код: sql
1.
SELECT LAST_INSERT_ID() as `id`;



и есть подозрение, что ТС надо озвучить полную задачу, а не кусочки её решения, тогда может и будет предложено быстрое, правильное решение.
а так, по выше описанному, видно, что ТС не вполне владеет темой.

как расшифровывается ТС?
...
Рейтинг: 0 / 0
помогите выбрать самый быстрый вариант
    #38753478
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем_sqlкак расшифровывается ТС?Топикстартер. Т.е. человек, который начал топик, написал самый первый пост.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите выбрать самый быстрый вариант
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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