Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE vs DELETE & INSERT / 7 сообщений из 7, страница 1 из 1
25.05.2004, 12:15
    #32532109
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
Есть таблица с несколькими полями, без первичного ключа.
По ходу задачи необходимо обновлять некоторые поля в строке таблицы.
т.к. первичного ключа нет (да он бы непригодился в данном случае), то апдейт происходит по нескольким фильтрам:
update table set count='a' where id='b' and date='c' and hour='e'

Мне кажется, что такой расширенный набор фильтров (where) способствует долгому выполнению запроса.

Решился на преобразование предыдущего запроса в:
delete from table where id='b' and date='c'
и
insert into table set count='a', id='b', date='c', hour='e'

Поидее должно быть быстрее, но кажется не намного.
Какие вообще есть способы решения данной проблемы?
Когда необходимо обновление конкретного столбца в зависимости от других НЕСКОЛЬКИХ?
Может есть финт заведения ключей и проч..
Подскажите.
...
Рейтинг: 0 / 0
25.05.2004, 12:16
    #32532111
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
Я создал индексное поле. Его содержимое формирую при добавлении новой записи - склеиваю значения 3х полей.
т.е. получается уникальный ключ:
param1|param2|param3|double_key|
value1|value2|value3|value1value2value3|
Но не для всех таблиц возможно создать индекс по трем полям.
если необходимо учитывать текстовове поле, размером более 255 символов, то я немогу использовать в качестве индекса поле типа char.

Какие есть варианты решения?
Может быть имеет смысл преобразовывать текст в некую цифровую последовательность.. Но как?

Или есть совершенно другое решение?
...
Рейтинг: 0 / 0
25.05.2004, 15:42
    #32532756
гуестт
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
А нельзя добавить поле для хранения первичного ключа? Или изменение структур недопустимо?

А длинное текстовое поле, наверное, можешь свернуть какой-нить функцией типа md5.
...
Рейтинг: 0 / 0
26.05.2004, 10:38
    #32533936
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
А нельзя добавить поле для хранения первичного ключа?
во втором сообщении я описал, что добавил поле double_key.
это первичный индекс, который я и использую в выражении
update ... where double_key='value1value2value3'
т.е. я заменил запрос типа:
update table set field='value0' where field1='value1' and field2='value2' and field3='value3'
на
update table set field='value0' where double_key='value1value2value3'

по моим подсчетам, это должно быть намного быстрее, т.к. число фильтров в выборке уменьшилось до одного, и поле является индексом.

НО!
проблема в том что это поле может быть длинным. более 255 символов.

А длинное текстовое поле, наверное, можешь свернуть какой-нить функцией типа md5.
я думал о ней.
но насколько мне известно, она не такая уж и быстрая функция..

какие есть еще предложения по сворачиванию?
...
Рейтинг: 0 / 0
26.05.2004, 13:45
    #32534543
гуестт
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
Скорость выполнения ф-ии md5 не важна, если полученное значение хранить в отдельном поле записи. Выполняться такая ф-я будет только при изменении твоего длинного текстового поля - т.е. не "на лету" в процессе каких-то серийных действий, а на фоне юзерской интерактивной работы, когда собственно скорость её выполнения несущественна.

а по поводу первичного ключа - может стоит все-таки его не формировать из нескольких полей, а вести это поле с помощью автоинкремента? Ведь главное - это обеспечить его уникальность?
...
Рейтинг: 0 / 0
26.05.2004, 14:02
    #32534597
Wanenhalf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
а по поводу первичного ключа - может стоит ... вести это поле с помощью автоинкремента?

смысл в этом поле?
я хочу обновить данные. какие именно - определяется НАБОРОМ фильтров.
в момент обновления я знаю только эти значения.
не делать же мне выборку, для того что бы узнать значение автоинкрементного поля, а потом сделать апдейт для этого поля..
...
Рейтинг: 0 / 0
26.05.2004, 14:18
    #32534648
Хрен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UPDATE vs DELETE & INSERT
Посмотрите команду replace это аналог delete&insert но выполняется быстрее.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UPDATE vs DELETE & INSERT / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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