C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как бы уменьшить время обработки ?
Oper01
Отправлено: 05.03.2004, 00:02


Станционный диспетчер

Группа: Участник
Сообщений: 145



Есть таблица, в которой порядка 50000 записей. В одном поле (формат текстовый) очень много одинаковых строк. Т.е. из 50000 текстовых значений этого поля разных всего лишь штук 10-15. Остальные повторяются. Мне нужно вытащить из этого поля эти разные значения и запихнуть из в ComboBox.
У меня всё это происходит очень медленно, так как просто делаю SQL запрос с сортировкой по этому полю и обычным перебором от 0 до RecordCount тупо добавляю отличную от предыдущей записи в ComboBox. Есть ли способ всё это дело ускорить ? У меня машинка не медленная, а задумывается секунд на 40-50, что же будет на других то ? Подскажите варианты возможных действий !!!
xTrim
Отправлено: 05.03.2004, 06:30


Машинист паровоза

Группа: Участник
Сообщений: 208



а если так
SQL
select distinct exchange from master.dbf
olegenty
Отправлено: 05.03.2004, 09:33


Ветеран

Группа: Модератор
Сообщений: 2412



а я бы вообще декомпозицию сделал на две таблицы, и вынес это поле в справочную таблицу. а вязался по целому значению.
Gedeon
Отправлено: 05.03.2004, 09:42


Ветеран

Группа: Модератор
Сообщений: 1742



Если БД ваша, то вам пожалуй надо почитать книжечку про реляционные базы данных, а конкретно про нормализацию оных.
Ну и неплохо бы про SQL.
Guest
Отправлено: 05.03.2004, 12:08


Не зарегистрирован







Вопрос к xTrim про SQL запрос "select distinct exchange from master.dbf ". Что есть что ?
xTrim
Отправлено: 05.03.2004, 13:39


Машинист паровоза

Группа: Участник
Сообщений: 208



выбрать неповторяющиеся значения exchange из master.dbf
Oper01
Отправлено: 07.03.2004, 02:26


Станционный диспетчер

Группа: Участник
Сообщений: 145



А поле по которому выбирать неповторяющиеся значения ? Не понял как этот запрос будет работать, честное слово. Если не сложно поясните мне тупому smile.gif.
xTrim
Отправлено: 09.03.2004, 08:22


Машинист паровоза

Группа: Участник
Сообщений: 208



значения выбираются по полю exchange
Snake
Отправлено: 09.03.2004, 10:53


Ученик-кочегар

Группа: Участник
Сообщений: 22



Еще можно так попробовать:

CODE
SELECT exchange FROM master.dbf GROUP BY exchange


По полю exchange неплохо иметь индекс.
Deem
Отправлено: 09.03.2004, 12:19


Мастер участка

Группа: Участник
Сообщений: 327



Даешь нормализацию!
olegenty
Отправлено: 09.03.2004, 12:33


Ветеран

Группа: Модератор
Сообщений: 2412



Вот и я то же самое говорю, проблемы нет, а сообщений столько, будто и правда проблема.
Oper01
Отправлено: 09.03.2004, 23:21


Станционный диспетчер

Группа: Участник
Сообщений: 145



Объясните пожалуйста, что такое нормализация ??? У меня жена, ребёнок маленький, ну не успеваю я все умные книжки читать smile.gif).
olegenty
Отправлено: 10.03.2004, 08:12


Ветеран

Группа: Модератор
Сообщений: 2412



сходи на SQL.RU, где-нибудь там стопудово есть. и на citforum.ru можешь метнуться. по вопросам методов проектирования БД. обычно это декомпозиция и ER.
Oper01
Отправлено: 11.03.2004, 00:22


Станционный диспетчер

Группа: Участник
Сообщений: 145



Спасибо!
Admin
Отправлено: 17.03.2004, 14:38


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE
Объясните пожалуйста, что такое нормализация


Конкретно к вашему случаю это означает:

Необходимо вашу таблицу разбить на 2:

В таблице-справочнике будет список этих 10-15 возможных значений

TblSpr
-------
ID Name
1 женат
2 холостой
3 разведенный
4 кастрированный
....

В основной таблице — сами данные
Num Name IDSpr
1 Иванов 1
2 Петров 3
3 Сидоров 2
....

И связываете эти таблицы по полям ID — IDSpr
Oper01
Отправлено: 18.03.2004, 21:08


Станционный диспетчер

Группа: Участник
Сообщений: 145



Уважаемый, Admin !
С меня стакан ! Всё просто и понятно рассказали !
Видимо я не одинок с женой и ребёнком smile.gif.

Вернуться в Работа с базами данных в C++Builder