Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float.
Что быстрее:
1) запросить 2 значения float из двух полей типа float.
2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?
Здравствуйте, Аноним, Вы писали:
А>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float. А>Что быстрее: А>1) запросить 2 значения float из двух полей типа float. А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?
Здравствуйте, Аноним, Вы писали:
А>Надо выдирать из каждой записи в таблице (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 в С++ не проблема.
Здравствуйте, Alexey Frolov, Вы писали:
AF>Здравствуйте, Аноним, Вы писали:
А>>Я работаю с БД в С++ (через MFC-ODBC). Разбить double на два float в С++ не проблема.
AF>Скорее всего вам так кажется, что не проблема
Хех... Возможно я немного недоговорил... но все зависит от того как этот double записать:
float f[2] = {f1, f2};
<...>
double d = &f;
//сохраняем d в таблицу
P.S. Хотя, если я не ошибаюсь в Борландах такой вариант не сработает.
Здравствуйте, 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-битную платформу. Не факт конечно что это произойдет, нужно решать конкретную текущую задачу. Это так просто, примите к сведению. Я думаю, что привел далеко не полный список вероятных проблем.
Здравствуйте, Аноним, Вы писали:
А>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float. А>Что быстрее: А>1) запросить 2 значения float из двух полей типа float. А>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?
А можно узнать, что Вы хотите получить в результате, а то я три раза прочитала вопрос и три раза подумала "А зачем?"
Здравствуйте, svanir, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float. А>>Что быстрее: А>>1) запросить 2 значения float из двух полей типа float. А>>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?
S>А можно узнать, что Вы хотите получить в результате, а то я три раза прочитала вопрос и три раза подумала "А зачем?"
Требуется отображать векторную топографическую карту в реальном времени.Карта может содержать десятки тысяч примитивов и еще больше координат. Загружать все эти данные в память нет возможности. Создавать свой формат файла нет времени. принято решение использовать локальную БД. Предположительно, при отрисовке карты будет выполнятся n-ое количество запросов. Поэтому меня волнует производительность запросов.
Здравствуйте, ncode, Вы писали:
N>Здравствуйте, svanir, Вы писали:
S>>Здравствуйте, Аноним, Вы писали:
А>>>Надо выдирать из каждой записи в таблице (MS Access) по 2 значения типа float. А>>>Что быстрее: А>>>1) запросить 2 значения float из двух полей типа float. А>>>2) запросить 1 значение double из одного поля типа double, а затем разбить его на 2 значения типа float?
S>>А можно узнать, что Вы хотите получить в результате, а то я три раза прочитала вопрос и три раза подумала "А зачем?"
N>Требуется отображать векторную топографическую карту в реальном времени.Карта может содержать десятки тысяч примитивов и еще больше координат. Загружать все эти данные в память нет возможности. Создавать свой формат файла нет времени. принято решение использовать локальную БД. Предположительно, при отрисовке карты будет выполнятся n-ое количество запросов. Поэтому меня волнует производительность запросов.
Вы сначала сделайте по простому, чтобы работало. А потом увидите там ли в вашей системе слабое место или нет. Я не пытаюсь призвать к тому что не нужно изначально думать о производительности, но все таки "преждевременная оптимизация — корень всех зол (с)"
N>>Требуется отображать векторную топографическую карту в реальном времени.Карта может содержать десятки тысяч примитивов и еще больше координат. Загружать все эти данные в память нет возможности.
Наиболее стандартная задача, которая, как мне кажется, может здесь возникнуть — это выбрать объекты, которые попадут в окно отображения. Т.е будут в некотором интервале по широте и долготе. Как вы себе реально это представляете, имея координаты запакованные таким хитрым способом? Сравнение тут делать нельзя, индексация бессмысленна. Т.е вы выберете миллион координат и отфильтруете ненужные? Мне кажется движок (пусть даже ms access) гораздо лучше справится с этой задачей и выдаст вам вашу тысячу координат, вместо перебора всего миллиона. О какой производительности тут может идти речь?
AF>Наиболее стандартная задача, которая, как мне кажется, может здесь возникнуть — это выбрать объекты, которые попадут в окно отображения. Т.е будут в некотором интервале по широте и долготе. Как вы себе реально это представляете, имея координаты запакованные таким хитрым способом? Сравнение тут делать нельзя, индексация бессмысленна. Т.е вы выберете миллион координат и отфильтруете ненужные? Мне кажется движок (пусть даже ms access) гораздо лучше справится с этой задачей и выдаст вам вашу тысячу координат, вместо перебора всего миллиона. О какой производительности тут может идти речь?
именно так, а если есть две таблицы (примитивы и точки (дочерняя)), то можно бы еще подумать о хранении в родительской таблице двух точек, описывающих верхний и нижний углы квадрата, куда примитив вписывается. Тогда при отборе примитивов в дочернюю таблицу надо будет лезть только за нужными. ну если я правильно понял что надо в задаче....