|
|
|
| имеется три таблицы
1.face -в ней надо произвести обновление
2.prava -данные которые надо перетащить в face
3.face_prava -содержит идентификаторы соответствия таблиц между собой
Запрос не работает,пишет ошибка синтаксиса select
update face set
ser_vd=(select ser from prava,face_prava,face
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num ),
num_vd=(select num from prava,face_prava,face
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num ),
dat_vyd=(select data_vid from prava,face_prava,face
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num ),
srok_deistv=(select srok_deyst from prava,face_prava,face
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num ),
kategor=(select kateg from prava,face_prava,face
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num ),
stazh=(select otmetki from prava,face_prava,face
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num )
where prava.sis_num=face_prava.sispr and face_prava.sisfc=face.sis_num;
Пожалуйста подскажите как лучще сделать и быстрее такую операцию(размер таблиц порядка 500 мегабайт ).
Через скрипт PHP очень долго получится,и если кто знает как можно в поле записать данные из нескольких полей другой таблицы,например :
в поле ФИО tb1 из tb2 фамилия имя отчество по условию совпадения ip к примеру (таблицы порядка гига а то и больше) | |
|
|
|
|
|
|
|
для: hars
(29.06.2006 в 13:10)
| | Хм... зря такой запрос с такими объёмами используете... у вас какая цель? Что требуется сделать? | |
|
|
|
|
|
|
|
для: cheops
(29.06.2006 в 15:28)
| | имеется три таблицы
1.face -в ней надо произвести обновление
2.prava -данные которые надо перетащить в face
3.face_prava -содержит идентификаторы соответствия таблиц между собой
Проще говоря надо из трёх таблиц сделать одну,экономить место нужно,да и быстрее будет запрос выполняться к одной таблице чем к трём. | |
|
|
|
|
|
|
|
для: hars
(30.06.2006 в 11:18)
| | Попробуйте следующий запрос
UPDATE face, prava, face_prava
SET face.ser_vd = prava.ser,
face.num_vd = prava.num,
face.dat_vyd = prava.data_vid,
face.srok_deistv = prava.srok_deyst,
face.kategor = prava.kateg,
face.stazh = prava.otmetki
WHERE prava.sis_num=face_prava.sispr AND
face_prava.sisfc=face.sis_num;
|
| |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 11:59)
| | А ещё лучше по частям его осуществляйте т.е. добавьте в WHERE-условие оганичение скажем сначала обработайте первые 10000 записей, потом следующие 10000 и т.д. | |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 12:00)
| | спасибо сейчас попробую | |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 12:00)
| | Поставил обрабатывать 100 записей запрос выполняется уже 6 минут и до сих пор,посылал из командной строки.Может есть какой-то другой альтернативный метод,с тем же результатом? (размер face 1.3 гига)
.......WHERE face.sis_num<100 and prava.sis_num=face_prava.sispr AND
face_prava.sisfc=face.sis_num; | |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 12:00)
| | видимо Update не подходит ,пытался выполнить запрос на обновление одной строки,mysql забирает весь проц ,может проще создать новую таблицу,но тогда опять же данные надо как то вытаскивать,а их много.Замкнутый круг какой-то получается :( | |
|
|
|
|
|
|
|
для: hars
(30.06.2006 в 14:16)
| | Попробую перенести только идентификатор соответствия (из одной в другую),возможно так будет быстрее.
Кто знает как лучше работать с большими БД(1 и более гига),помогите пожалуйста.
Или стоит вообще использовать другую БД?! | |
|
|
|
|
|
|
|
для: hars
(30.06.2006 в 14:16)
| | Напомните размеры таблиц - какая таблица сколько места занимает? | |
|
|
|
|
|
|
|
для: cheops
(30.06.2006 в 18:41)
| | В данном конкретном случае
face 179 Mb
face_prava 136 Mb
prava 304 Mb | |
|
|
|
|
|
|
|
для: hars
(30.06.2006 в 18:49)
| | Задача выполнена.
Было сделано:
1, Оптимизирован запрос(огромное спасибо cheops )
2, Расширил буфер памяти до 100 метров (set-variable=key_buffer=100M ,прописывается в my.ini)
3, Проиндексировал поля по которым осуществлялась идентификация
Время выполнения составило порядка 40 минут,уже неплохо( celeron 1.7G / 382 Mb).
Всё же если кто знает как слить 2 и более столбца в один ,запросом(и) или залить из файла три столбца в один ,подскажите,т.к. лопатить с помощью PHP 410 Mb что то не очень хочется,это ОЧЕНЬ долго,и может повиснуть и всё что угодно.
Заранее спасибо. | |
|
|
|