Wirth писал(а) 25. Октября 2010 :: 06:18:Вечером хочу попробовать потестить на скорость совместного использования 1sqlite и V7DBNet. Подскажите как переписать такой пример под 1sqlite?
//
Пример использую для проверки скорости перебора большого справочника (Самый тяжёлый режим для V7DBNet, т.к. кэш роли в нем не играет).
Новый10 - строка 100
Примерно так:
Процедура Сформировать()
Транзакция=1;
База = СоздатьОбъект("SQLiteBase");
База.Открыть(":memory:");
Запрос = База.НовыйЗапрос();
Если Транзакция = 1 Тогда
Запрос.ВыполнятьВТранзакции = 1;
КонецЕсли;
ТекстЗапроса = "
|SELECT SUM(1) Всего
| ,SUM(case
| when (CAST(Тест.Новый10 as REAL) % 5) = 0 then 1
| ELSE 0
| end) ПоУсловию
|FROM [Справочник.Тест] Тест
|ORDER BY Descr
|";
//Запрос.Отладка(1);
т1 = _GetPerformanceCounter();
тзРезультат = Запрос.ВыполнитьЗапрос(ТекстЗапроса);
т2 = _GetPerformanceCounter();
Если тзРезультат.КоличествоСтрок()>0 Тогда
Сообщить("Время выполнения 1SQLITE = "+((т2-т1)));
Сообщить("Всего элементов = "+тзРезультат.получитьЗначение(1,"Всего")+", удовлетворяют условию = "+тзРезультат.получитьЗначение(1,"ПоУсловию"));
Иначе
Сообщить("Нет результата!","!");
КонецЕсли;
КонецПроцедуры
Но тестировать, как мне кажется, лучше на задачах с хитрожопыми условиями, приближенными к реальности, где будет попадание/не попадание в индекс и т.п.
В данном примере идет такой же тупой перебор и, думаю, вряд ли получится быстрее твоего кода.
И еще одно примечание. При конверации строки в число получится 0, если там "слово".
Цитата:When casting a BLOB value to a REAL, the value is first converted to TEXT.
When casting a TEXT value to REAL, the longest possible prefix of the value that can be interpreted as a real number is extracted from the TEXT value and the remainder ignored. Any leading spaces in the TEXT value are ignored when converging from TEXT to REAL. If there is no prefix that can be interpreted as a real number, the result of the conversion is 0.0.