powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите оптимизировать запрос для больших данных.
19 сообщений из 19, страница 1 из 1
помогите оптимизировать запрос для больших данных.
    #38600460
victor79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
UPDATE _props p
SET id_val=(SELECT id FROM vals v WHERE v.crc = p.crc and v.val = p.val LIMIT 1)



все бы ничего, но в таблице _props 50млн записей. В vals 10млн. И это не предел.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TEMPORARY TABLE _props (
id_obj int,
id_prop int,
ord_val tinyint,
crc int,
val blob,
id_val int)

CREATE TABLE vals (
id INT AUTO_INCREMENT,
crc int,
val blob,
PRIMARY KEY (id),
INDEX (crc))
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600481
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor79,

И ты, конечно же, хочешь обязательно изменить сразу все 50 миллионов записей, так?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600673
victor79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivИ ты, конечно же, хочешь обязательно изменить сразу все 50 миллионов записей, так?

хм. Ты хочешь сказать, что менять их по одной и в цикле будет быстрее и правильней? что нужно типа так:
Код: sql
1.
2.
3.
UPDATE _props p
SET id_val=(SELECT id FROM vals v WHERE v.crc = p.crc and v.val = p.val LIMIT 1)
LIMIT 1


Возможно ты и прав. Это даст возможность прикрутить к программе бегунок прогресса.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600708
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor79Ты хочешь сказать, что менять их по одной и в цикле будет быстрее и правильней?Нет, вопрос в том, действительно ли нужно менять все 50 миллионов записей?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600726
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
UPDATE _props p
SET id_val=(SELECT id FROM vals v WHERE v.crc = p.crc and v.val = p.val LIMIT 1)
LIMIT 1


Этот запрос может не дать того, чего ожидает автор. Limit без Order by может давать разные результаты.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600743
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gijad
Код: sql
1.
2.
3.
UPDATE _props p
SET id_val=(SELECT id FROM vals v WHERE v.crc = p.crc and v.val = p.val LIMIT 1)
LIMIT 1



Этот запрос может не дать того, чего ожидает автор. Limit без Order by может давать разные результаты.Точнее так - из-за внешнего LIMIT 1 этот запрос не может дать того, чего ожидает автор.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600913
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor79хм. Ты хочешь сказать, что менять их по одной и в цикле будет быстрее и правильней?

Не правильнее, а единственно возможно. Всю таблицу ты не изменишь одним оператором -- сервак твой лопнет.

И не по одной, а порциями, по несколько тыщ.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38600930
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivvictor79хм. Ты хочешь сказать, что менять их по одной и в цикле будет быстрее и правильней?

Не правильнее, а единственно возможно. Всю таблицу ты не изменишь одним оператором -- сервак твой лопнет.С чего бы ему лопаться?
Если никакая другая сессия не упрется в заблокированную таблицу, то не вижу ничего страшного.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601009
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Лог переполнится.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601016
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmiksoft,

Лог переполнится.А есть ли он?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601038
Gijad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
50kk строк для mysql вообще не объем. У меня 1,6kkk апдейтил никаких сложностей, движ myisam.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601040
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GijadУ меня 1,6kkk апдейтил никаких сложностей, движ myisam.так там лога никакого нет
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601123
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivmiksoft,

Лог переполнится.А есть ли он?

лог всегда есть в БД.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601130
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmiksoftпропущено...
А есть ли он?

лог всегда есть в БД.У MyISAM лог? откуда?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601439
victor79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
глупый ваш майскууль. Не может выполнить простой запрос:
Код: sql
1.
2.
3.
SELECT p.id_obj, p.id_prop, p.ord_val, p.crc, p.val, v.id
FROM _props p LEFT JOIN vals v FORCE INDEX (crc)
ON p.crc = v.crc AND p.val = v.val


при количестве записей в _props всего ОДНА ТЫСЯЧА (тестовые данные), и по индексу crc повторений практически нету, а потому не важно, что в vals 5млн записей. Аксес был умней, но он запнулся на каких-то блокировках транзакций при милионе в _props в подобном запросе, а на статысячах пахал нормально.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601455
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor79глупый ваш майскуульну тогда используйте фвмас, что вам мешает?
и зачем LEFT join? обычный чем не подошёл?
да и вообще с чего вы взяли, что запросы в первом и последнем постах будут делать одно и то же?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601483
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftMasterZivпропущено...


лог всегда есть в БД.У MyISAM лог? откуда?


А кто сказал, что это MyISAM?
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601484
victor79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirи зачем LEFT join? обычный чем не подошёл?
да и вообще с чего вы взяли, что запросы в первом и последнем постах будут делать одно и то же?
у меня не для всех значений есть id_val, для которых нету, это внутренние идентификаторы в поступившей загружаемой таблице, и они будут заменяться на другие значения в процессе загрузки.

А исходя из того, что у меня не для всех есть id_val, то мне и нужен именно LEFT JOIN а не INNER.

А проставлять ли id_val в первую таблицу или скомпоновать и залить в новую - меня любой бы вариант устроил, если бы работал.
...
Рейтинг: 0 / 0
помогите оптимизировать запрос для больших данных.
    #38601487
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victor79у меня не для всех значений есть id_val, для которых нету, это внутренние идентификаторы в поступившей загружаемой таблице, и они будут заменяться на другие значения в процессе загрузки .Замечательно, значит, в процессе обновления их можно пропустить... или принципиально важно заменять их null-ами?
victor79А проставлять ли id_val в первую таблицу или скомпоновать и залить в новую - меня любой бы вариант устроил, если бы работал.Речь была не о том.
Этот запрос на выборку "аналогичен" первому апдейту
Код: sql
1.
2.
3.
SELECT p.*
 ,(SELECT id FROM vals v WHERE v.crc = p.crc and v.val = p.val LIMIT 1) val_id
FROM _props p

, а вот этот - второму
Код: sql
1.
2.
3.
4.
SELECT p.*
 ,v.id val_id
FROM _props p 
LEFT JOIN vals v FORCE INDEX (crc) ON p.crc = v.crc AND p.val = v.val

Если пары (crc,val) в таблице vals неуникальны (а их уникальность тут вроде бы не озвучивалась; более того, исходя из наличия "limit 1" в первом запросе можно предположить, что её таки нет), то запросы неравнозначны.
И если уж таблицы связываются по парам (crc,val), то и индекс надо делать по паре полей, а не по одному.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите оптимизировать запрос для больших данных.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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