Оптимизация импорта текстовых файлов в MySQL

beg_mysql

Новичок
Оптимизация импорта текстовых файлов в MySQL

Есть скрипт обновления цен. Он состоит из 2-х этапов: импорт данных из текстовых файлов в базу MySQL и собственно само обновление.
Интересуют практические советы по оптимизации импорта данных.

Файлы текстового формата размеров 1-2 Mb.
Таблица для импорта типа MyISAM, состоит из 3-х полей: id (int 10), Tovar (varchar 20), price (int 5)

1) как лучше «загонять» данные в базу?
- fopen(price.txt) + fgetscv + insert (сейчас использую)
- file(‘http://…./price.txt’) + replace + insert
- copy файл на сервер + file(price.txt) + replace + insert
Намного ли быстрее LOAD DATA INFILE (у меня не хватает привилегий)

2) Стоит ли перейти на тип таблицы HEAP (сейчас MyISAM)?

3) индексировать ли поле id (уникальный код порядка 7-9 цифр) или для индекса добавить столбец с автоинкриментом?

4) для столбца Tovar какой лучше использовать тип: char или varchar
 

Profic

just Profic (PHP5 BetaTeam)
1) LOAD DATA INFILE
2) тебе твои данные нужны? или как?
3) если id уникален и так, то сделать для него primary key без auto_increment и с ним в противном случае
4) если поле может быть не очень большим - char в таком случае таблица будет в fixed формате и по идее иметь большее быстродействие
 

_RVK_

Новичок
1. Твой вариант.
2. Чем тебе не нравится myISAM? а HEAP это тип временных таблиц. Они хранятся в памяти.
3. я привык везде добавлять автоинкрементное поле. Для обеспечения уникальности можно использовать UNIQUE
4. char. в случае необходимости mysql сама преобразует тип поля в varchar

Большенство ответов можно найти в мане.
 

beg_mysql

Новичок
Автор оригинала: Profic
1) LOAD DATA INFILE
2) тебе твои данные нужны? или как?
3) если id уникален и так, то сделать для него primary key без auto_increment и с ним в противном случае
4) если поле может быть не очень большим - char в таком случае таблица будет в fixed формате и по идее иметь большее быстродействие
1) а если привилегии не хватает, то какой вариант
2) данные нужны только для того, чтобы их сравнить с "моими" данными и в случае не обходимости обновить. Т.е. лучше heap?
3) да id уникален, но "большой" (7-9 разрядов)
4) и я так полагаю

-~{}~ 20.12.04 19:01:

Автор оригинала: _RVK_
2. Чем тебе не нравится myISAM? а HEAP это тип временных таблиц. Они хранятся в памяти.
Большенство ответов можно найти в мане.
2) Так в том и дело, что хранится в памяти - значит должно быть быстрее

Мануал читал - интересовала практика


Спасибо за ответы
 

Profic

just Profic (PHP5 BetaTeam)
1) а если привилегии не хватает, то какой вариант
2) данные нужны только для того, чтобы их сравнить с "моими" данными и в случае не обходимости обновить. Т.е. лучше heap?
3) да id уникален, но "большой" (7-9 разрядов)
4) и я так полагаю
1) если нет, тот что есть
2) юзай что хочешь, mysql с конце концов, если таблица в памяти будет довольно большой скинет ее на диск
3) ну и что? int может иметь до 10 разрядов в беззнаковом предстравлении
4) насколько я помню жто верно только для myisam таблиц. во всех остальных случаях char > 4 символов превращается в varchar автоматом
 

_RVK_

Новичок
Profic
насколько я помню жто верно только для myisam таблиц. во всех остальных случаях char > 4 символов превращается в varchar автоматом
Не совсем так. Во первых к myISAM это тоже оносится. Во-вторых не всегда авоматом, а только:
"If any column in a table has a variable length, the entire row is variable-length as a result. Therefore, if a table contains any variable-length columns (VARCHAR, TEXT, or BLOB), all CHAR columns longer than three characters are changed to VARCHAR columns" (с) manual
 

Profic

just Profic (PHP5 BetaTeam)
_RVK_
дык, суть, то одна и та же :) если автору топика это так важно - посмотрит в мануале
 
Сверху