|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Вот придумываю новую стрктуру данных и хотел посоветоваться... Хочу как-то стандартизировать хранение и обращение к данным... Например ФИО граждан много где используется: - поставленные на учет - бухгалтер и директор предприятия - учредители - высвыбождаемые по сокращению - сотрудники Для этого делаю класс ФИОФамилияИмяОтчествоКому принадлежит Где "Кому принадлежит" это некий уникальный ключ... Теперь применяю это к гражданам поставленым на учет. На учет гражданин может встать много раз и еще при этом менять это самое ФИО... Делаю классы ГражданинКодДата рождения Смена ФИОКодДатаКод гражданина Теперь сталкиваюсь с тем, что получить то самое ФИО гражданина на некую дату довольно долгий процесс. Нужно выбрать все изменения ФИО этого гражданина по указаную дату... Отсортировать это в обратном порядке и взять первую запись. Даже 500 граждан уже долго выводятся... Дублировать данные так же не хочется... Но и такое время получения ФИО так же не устраивает. ---------- Cache for Windows (x86-64) 2010.2.3 (Build 702) Tue Feb 15 2011 14:20:27 EST Cache for Windows (x86-64) 2012.1.1 (Build 602) Wed Mar 7 2012 22:36:34 EST ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:28 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Вот запрос, коим выбираю ФИО... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:33 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
В soi_arh_data_cls.name хранятся все ФИО... В soi_arh_data.name хранятся изменения ФИО граждан поставленых когда-либо на учет... А b.citizen это код некоего гражданина... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:36 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
По всем ключевым, связующим таблицы, полям сделаны индексы... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:37 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Вам принципиально получать это запросом? Не люблю я именно такие вещи делать запросами. Лучше сделать метод. В метода, кстати, тоже можно пользоваться запросами, а можно искать ид нужной записи ордером по индексу. Так как метод работы со структурой глобала находится в классе, я не считаю это преступлением. Работает в одно действие. Ну а если принципиально делать это запросом, во-первых, пересчитайте селективности и после этого давайте план запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:40 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Кстати, у вас дублирование? отдельная таблица для неких актуальных ФИО и отдельно история? Стоит ли так? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 10:42 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsa, Приветствую! может такой подход устроит: в классе одно свойство ФИО но оно в виде: %LB($LB(date,актуальное ФИО),$LB(date,предыдущее ФИО),....) т.е. при сохранении записи мы всегда ее ставим в листе на первое место, со сдвигом остальных + дополнительный метод, вычисляемое поле, и т.д. в которая при передачи параметра возвращает необходимое ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 11:44 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.Вам принципиально получать это запросом? Нет. Просто удивила такая задержка по времени... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:05 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.Кстати, у вас дублирование? отдельная таблица для неких актуальных ФИО и отдельно история? Дублирования пока нет. Есть таблички - граждане - история смены ФИО (только дата смены) - все ФИО Блок А.Н.Стоит ли так? Так вроде вся информация сейчас нужна... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:07 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Ymka2007krvsa, Приветствую! может такой подход устроит: в классе одно свойство ФИО но оно в виде: %LB($LB(date,актуальное ФИО),$LB(date,предыдущее ФИО),....) Неее. Это вообще не подойдет... Т.к. гражданина нужно искать запросом (!) по любому его ФИО, а при таком подходе разве запрос будет работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:09 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsa , Почему бы вместо select * from soi_arh_data_cls.name не использовать select top 1 * from soi_arh_data_cls.name? TOP ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:34 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitПочему бы вместо select * from soi_arh_data_cls.name не использовать select top 1 * from soi_arh_data_cls.name? В моём случае нужна "последняя ближайшая дата"... Поможет ли это ускорить? Т.к. поставить Код: sql 1.
не проблема... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 12:56 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Однако с Код: sql 1.
есть ускорение. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:02 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsaНужно выбрать все изменения ФИО этого гражданина по указаную дату... Отсортировать это в обратном порядке и взять первую запись .krvsaПоможет ли это ускорить?krvsaесть ускорениеВсегда лучше ограничивать число возвращаемых данных, если это возможно, особенно учитывая наличие оптимизации для TOP ... ORDER BY . ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:14 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitВсегда лучше ограничивать число возвращаемых данных, если это возможно, особенно учитывая наличие оптимизации для TOP ... ORDER BY . Спасибо, учту на будущее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:27 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitособенно учитывая наличие оптимизации для TOP ... ORDER BY . Только мало что с того понял... Читал Яндекс перевод Яндекс_переводНачиная с Caché 5.2.2, оптимизация было сделано для ТОП ... ORDER BY, чтобы уменьшить интервал до первой строки был подготовлен. Как правило, эти изменения существенно улучшить производительность. Однако, в редких случаях, эти оптимизации эвристики сделать запрос хуже. В этих случаях,% NOTOPOPT намек теперь доступен в силу нормальную общая стоимость оптимизации обработки синтаксис таков: ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:29 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
При таком варианте, с %NOTOPOPT Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
не заметил ускорения... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:31 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsaПри таком варианте, с %NOTOPOPT не заметил ускорения...Зачем Вам использовать %NOTOPOPT? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:35 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitЗачем Вам использовать %NOTOPOPT? Я понятия не имею что это за "зверь"... Ты дал ссылку на него... Я по переводу вообще не понял зачем это нужно, но таки вставил для эксперимента. Вот и все... Для чего %NOTOPOPT нужен? Когда его использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:39 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsaДля чего %NOTOPOPT нужен?В редких случаях, оптимизация TOP ORDER BY делает план запроса хуже. Именно для отключения этой оптимизации и служит %NOTOPOPT. krvsaКогда его использовать?Когда план запроса без него хуже, а с ним лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:51 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitkrvsaКогда его использовать?Когда план запроса без него хуже, а с ним лучше. Лаконично! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 13:52 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Решил для ускорения хранить "самое последнее ФИО" со ссылкой сразу на код гражданина... Т.о. оперативно смотреть ФИО будет достаточно быстро. Вот только придется поддерживать "целостность" такого "ускорения"... Поскольку появляется дубляж одного их ФИО гражданина и не факт что это будет действительно "самое последнее ФИО". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 14:47 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitkrvsaДля чего %NOTOPOPT нужен?В редких случаях, оптимизация TOP ORDER BY делает план запроса хуже. Именно для отключения этой оптимизации и служит %NOTOPOPT.Я бы не сказал, что в редких. Иногда при наличии TOP оптимизатор строит план запроса, используя поля сортировки, а не поля условий, а это иногда плохо. %NOTOPOPT отключает такую оптимизацию. krvsa, а почему вы не хотите использовать две таблицы? человек - ... история смены фио - (ид человека, дата смены, фио). По ид человека и дате смены делаете индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:13 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsaРешил для ускорения хранить "самое последнее ФИО" со ссылкой сразу на код гражданина... Т.о. оперативно смотреть ФИО будет достаточно быстро. Вот только придется поддерживать "целостность" такого "ускорения"... Поскольку появляется дубляж одного их ФИО гражданина и не факт что это будет действительно "самое последнее ФИО".Я так сделал один раз и пожалел. Если хотите так делать, то делаете ссылку-вычисляемое поле. Не так уж потеряете по скорости, зато не будет проблем с целостностью данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:14 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.krvsa, а почему вы не хотите использовать две таблицы? человек - ... история смены фио - (ид человека, дата смены, фио). По ид человека и дате смены делаете индекс. я бы сделал история фио - (ид человека, дата отмены, фио). пустая дата отмены даёт текущие фио (последние) по ид человека - история изменений. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:36 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.Иногда при наличии TOP оптимизатор строит план запроса, используя поля сортировки, а не поля условий, а это иногда плохо.Статистика по таблице собрана ( Оптимизация производительности )? Если собрана, а план всё равно плохой, то это верный признак написать в WRC с классификатором проблемы "SQL Performance". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:38 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.а почему вы не хотите использовать две таблицы? человек - ... история смены фио - (ид человека, дата смены, фио). Я сразу рассказал для чего мне нужна отдельная таблица именно под ФИО... Для некой стандартизации данных. По такой же аналогии хочу сделать: - адреса - договора - приказы и т.п... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:42 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.Я так сделал один раз и пожалел. Вот и я с сомнением на то смотрю... Просто уш дюже долго вычисляется то ФИО... Даже не ожидал такого на "фаст-фастес" СУБД! Блок А.Н.Если хотите так делать, то делаете ссылку-вычисляемое поле. Не так уж потеряете по скорости, зато не будет проблем с целостностью данных. Вот тут бы примерчик не помешал... Как делать вычисляемые поля по свойствам этого же класса можно найти и в доке... А тут изменения в 3-тьей таблице... Как инициировать пересчет тех ФИО-полей? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:48 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Может вообще вести ту "стандартизацию" только используя абстрактные классы... И кинуть ту структурку, что придумал ранее? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 15:53 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitЕсли собрана, а план всё равно плохой, то это верный признак написать в WRC с классификатором проблемы "SQL Performance".Собрана, план плохой. WRC тут не поможет, максимум скажут: "используйте %NOTOPOPT". У нас запросы генерирует некий модуль, и там всегда присутствует строчка типа TOP 1000000. А для каше, что TOP 1, что TOP 1000000 - план одинаковый. Может, если бы было TOP 1, он и был бы оптимальным. Также, как каше не учитывает разную селективность по значениям полей, и тут просто нужно отключать индексы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 16:12 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
Блок А.Н.У нас запросы генерирует некий модульМодуль можно улучшать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 16:16 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
krvsaБлок А.Н.Я так сделал один раз и пожалел. Вот и я с сомнением на то смотрю... Просто уш дюже долго вычисляется то ФИО... Даже не ожидал такого на "фаст-фастес" СУБД! План запроса кривой. В данном случае не каше работает медленно, а каше делает кучу лишней работы. krvsaБлок А.Н.Если хотите так делать, то делаете ссылку-вычисляемое поле. Не так уж потеряете по скорости, зато не будет проблем с целостностью данных. Вот тут бы примерчик не помешал... Как делать вычисляемые поля по свойствам этого же класса можно найти и в доке... А тут изменения в 3-тьей таблице... Как инициировать пересчет тех ФИО-полей?Ну и что, что изменения. Это вычисляемое поле хранить не надо. Сделайте метод в другом классе и используете его для вычисления. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 16:18 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
servitБлок А.Н.У нас запросы генерирует некий модульМодуль можно улучшать? Не очень понятен вопрос. 1. Имеются ли у меня полномочия? - да. 2. Вижу ли я в этом смысл? - пока нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2013, 16:20 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
ser_shuя бы сделал история фио - (ид человека, дата отмены, фио). пустая дата отмены даёт текущие фио (последние) по ид человека - история изменений. Я бы тоже:) Подробнее по ссылке Проектирование баз данных: хронологические данные: http://www.arbinada.com/main/node/26 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 20:30 |
|
Как бы соединить скорость и стандартизацию?
|
|||
---|---|---|---|
#18+
С датой начала проблема в этом случае, с отображением истории по принципу (дата начала-дата конца), с редактированием истории тоже могут быть нелогичности. У нас подобное есть, не нравится. Правда, у не совсем так сделано - в таблицы истории записи с датой отмены, а в основной таблице текущие значения. В плане прикрутить историю там, где ее не было - удобно, а работать с ней - не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 08:15 |
|
|
start [/forum/topic.php?all=1&fid=39&tid=1557204]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
173ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 533ms |
0 / 0 |