Производительность запроса.
От: Аноним  
Дата: 14.09.06 08:52
Оценка:
Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.
Что быстрее:
1) запросить 2 значения float из двух полей типа float.
2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?
Re: Производительность запроса.
От: godmother Украина  
Дата: 14.09.06 08:58
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.

А>Что быстрее:
А>1) запросить 2 значения float из двух полей типа float.
А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?

1)
Re: Производительность запроса.
От: Lloyd Россия  
Дата: 14.09.06 09:11
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?


А как вы собираетесь разбить его на 2 значения типа float?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Производительность запроса.
От: Alexey Frolov Беларусь  
Дата: 14.09.06 09:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.

А>Что быстрее:
А>1) запросить 2 значения float из двух полей типа float.

Этот способ наиболее простой и очевидный, а также интуитивно понятный

А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?


А это что за велосипед? Может я чего то не так понял, но имхо с этим способом проблем не оберетесь, а если и выиграете что-нибудь по времени, оно в итоге окажется не существенным, а может вообще не тем местом которое нужно было подвергнуть оптимизации
Re: Производительность запроса.
От: Аноним  
Дата: 14.09.06 10:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.

А>Что быстрее:
А>1) запросить 2 значения float из двух полей типа float.
А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?

Вопрос задавал я. По поводу предпочтительного пункта понятно.
Другой вопрос:
Имеется таблица, описывающая графические примитивы (точка, полилиния и т.п.). Так как количество точек для каждого примитива разное, то координаты точек для примитивов храняться в другой таблице, связанной с первой. При рисовании примитивов надо по сути запрашивать умножение таблиц. Так как точка всегда имеет две координаты, имеет ли смысл хранить эти координаты в первой таблице (примитивы), т.е. для точек не рисования точек не делать запрос ко второй таблице (координаты)? Стоит ли увеличивать избыточность в обмен на производительность?
Re[2]: Производительность запроса.
От: Аноним  
Дата: 14.09.06 10:37
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, <Аноним>, Вы писали:


А>>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?


L>А как вы собираетесь разбить его на 2 значения типа float?


Я работаю с БД в С++ (через MFC-ODBC). Разбить double на два float в С++ не проблема.
Re[3]: Производительность запроса.
От: Lloyd Россия  
Дата: 14.09.06 10:40
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Я работаю с БД в С++ (через MFC-ODBC). Разбить double на два float в С++ не проблема.


А вы уверены, что любое сочетание float-ов всегда даст валидный double?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Производительность запроса.
От: Alexey Frolov Беларусь  
Дата: 14.09.06 11:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я работаю с БД в С++ (через MFC-ODBC). Разбить double на два float в С++ не проблема.


Скорее всего вам так кажется, что не проблема
Re[4]: Производительность запроса.
От: ncode  
Дата: 14.09.06 11:16
Оценка:
Здравствуйте, Alexey Frolov, Вы писали:

AF>Здравствуйте, Аноним, Вы писали:


А>>Я работаю с БД в С++ (через MFC-ODBC). Разбить double на два float в С++ не проблема.


AF>Скорее всего вам так кажется, что не проблема


Хех... Возможно я немного недоговорил... но все зависит от того как этот double записать:
float f[2] = {f1, f2};
<...>
double d = &f;
//сохраняем d в таблицу


P.S. Хотя, если я не ошибаюсь в Борландах такой вариант не сработает.
Re[5]: Производительность запроса.
От: Alexey Frolov Беларусь  
Дата: 14.09.06 12:16
Оценка:
Здравствуйте, ncode, Вы писали:

N>Здравствуйте, Alexey Frolov, Вы писали:


AF>>Здравствуйте, Аноним, Вы писали:


А>>>Я работаю с БД в С++ (через MFC-ODBC). Разбить double на два float в С++ не проблема.


AF>>Скорее всего вам так кажется, что не проблема


N>Хех... Возможно я немного недоговорил... но все зависит от того как этот double записать:

N>
N>float f[2] = {f1, f2};
N><...>
N>double d = &f;
N>//сохраняем d в таблицу
N>


N>P.S. Хотя, если я не ошибаюсь в Борландах такой вариант не сработает.


В таком случае я бы на вашем месте выбрал в качестве типа-хранителя что-нибудь вроде unsigned char[8] или __int64. А еще лучше не заниматься ерундой и сделать 2 поля, разницы в скорости вы не увидите, но зато сколько сэкономите времени в будущем. Представьте себе что у вас когда-нибудь появится задача выбирать только те объекты которые укладываются в определенные рамки причем только по одной координате. Вот тут ваша производительность сведет все на нет. Вот еще вариант: вы захотите например чтобы каждая координата была double, или перейдете на 64-битную платформу. Не факт конечно что это произойдет, нужно решать конкретную текущую задачу. Это так просто, примите к сведению. Я думаю, что привел далеко не полный список вероятных проблем.
Re: Производительность запроса.
От: svanir Украина  
Дата: 14.09.06 12:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.

А>Что быстрее:
А>1) запросить 2 значения float из двух полей типа float.
А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?

А можно узнать, что Вы хотите получить в результате, а то я три раза прочитала вопрос и три раза подумала "А зачем?"
Re[2]: Производительность запроса.
От: ncode  
Дата: 14.09.06 12:41
Оценка:
Здравствуйте, svanir, Вы писали:

S>Здравствуйте, Аноним, Вы писали:


А>>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.

А>>Что быстрее:
А>>1) запросить 2 значения float из двух полей типа float.
А>>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?

S>А можно узнать, что Вы хотите получить в результате, а то я три раза прочитала вопрос и три раза подумала "А зачем?"


Требуется отображать векторную топографическую карту в реальном времени.Карта может содержать десятки тысяч примитивов и еще больше координат. Загружать все эти данные в память нет возможности. Создавать свой формат файла нет времени. принято решение использовать локальную БД. Предположительно, при отрисовке карты будет выполнятся n-ое количество запросов. Поэтому меня волнует производительность запросов.
Re[3]: Производительность запроса.
От: Alexey Frolov Беларусь  
Дата: 14.09.06 12:45
Оценка:
Здравствуйте, ncode, Вы писали:

N>Здравствуйте, svanir, Вы писали:


S>>Здравствуйте, Аноним, Вы писали:


А>>>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.

А>>>Что быстрее:
А>>>1) запросить 2 значения float из двух полей типа float.
А>>>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?

S>>А можно узнать, что Вы хотите получить в результате, а то я три раза прочитала вопрос и три раза подумала "А зачем?"


N>Требуется отображать векторную топографическую карту в реальном времени.Карта может содержать десятки тысяч примитивов и еще больше координат. Загружать все эти данные в память нет возможности. Создавать свой формат файла нет времени. принято решение использовать локальную БД. Предположительно, при отрисовке карты будет выполнятся n-ое количество запросов. Поэтому меня волнует производительность запросов.


Вы сначала сделайте по простому, чтобы работало. А потом увидите там ли в вашей системе слабое место или нет. Я не пытаюсь призвать к тому что не нужно изначально думать о производительности, но все таки "преждевременная оптимизация — корень всех зол (с)"
Re[4]: Производительность запроса.
От: Alexey Frolov Беларусь  
Дата: 14.09.06 12:54
Оценка:
N>>Требуется отображать векторную топографическую карту в реальном времени.Карта может содержать десятки тысяч примитивов и еще больше координат. Загружать все эти данные в память нет возможности.

Наиболее стандартная задача, которая, как мне кажется, может здесь возникнуть — это выбрать объекты, которые попадут в окно отображения. Т.е будут в некотором интервале по широте и долготе. Как вы себе реально это представляете, имея координаты запакованные таким хитрым способом? Сравнение тут делать нельзя, индексация бессмысленна. Т.е вы выберете миллион координат и отфильтруете ненужные? Мне кажется движок (пусть даже ms access) гораздо лучше справится с этой задачей и выдаст вам вашу тысячу координат, вместо перебора всего миллиона. О какой производительности тут может идти речь?
Re[5]: Производительность запроса.
От: hun  
Дата: 14.09.06 14:09
Оценка: +1
AF>Наиболее стандартная задача, которая, как мне кажется, может здесь возникнуть — это выбрать объекты, которые попадут в окно отображения. Т.е будут в некотором интервале по широте и долготе. Как вы себе реально это представляете, имея координаты запакованные таким хитрым способом? Сравнение тут делать нельзя, индексация бессмысленна. Т.е вы выберете миллион координат и отфильтруете ненужные? Мне кажется движок (пусть даже ms access) гораздо лучше справится с этой задачей и выдаст вам вашу тысячу координат, вместо перебора всего миллиона. О какой производительности тут может идти речь?

именно так, а если есть две таблицы (примитивы и точки (дочерняя)), то можно бы еще подумать о хранении в родительской таблице двух точек, описывающих верхний и нижний углы квадрата, куда примитив вписывается. Тогда при отборе примитивов в дочернюю таблицу надо будет лезть только за нужными. ну если я правильно понял что надо в задаче....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.