parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

обновление odbc драйвера + его сравнение со старым драйвером, с mssql драйвером, и direct запросом с TOP.

Misha v.3 30.06.2008 15:17 / 30.06.2008 17:37

исправил openType и options, немного изменил пропуск строк до указанного offset. стало работать существенно быстрее (ибо readOnly теперь работает).

тестировал следующим образом (MSSQL 2000):
- создал табличку с полями id int identity, uid varchar(63). на поле uid добавил unique index ASC.
- в табличку добавил 100 000 записей
- тестовый запрос:
	$t[^table::sql{
		SELECT
			*
		FROM
			test
		ORDER BY
			uid DESC
	}[
		$.limit(15)
		$.offset(90000)
	]]
и вывожу полученные записи.
- Stop SQL server, Start SQL server, 2 обращения к скрипту.

результаты:
1. parser 3.2.3 cgi + xml + старый odbc драйвер (9.4): первый запрос ~11 сек, второй и последующие запросы ~11 сек (без изменений);

2. parser 3.2.3 cgi + xml + новый odbc драйвер (9.5): первый запрос ~600ms, второй и последующие запросы ~500ms;

3. parser 3.2.3 cgi + xml + native mssql драйвер от egr-а: первый запрос ~5 сек, чторой и последующий ~3.5 сек.

4. запускаю Query Analizer, выполняю запрос:
SELECT getdate();
SELECT
	TOP 15 *
FROM
	test
WHERE
	id NOT IN (
		SELECT
			TOP 90000 id
		FROM
			test
		ORDER BY
			uid DESC
	)
ORDER BY
	uid DESC;
SELECT getdate();
что первый, что последующие запросы -- ~1.5 сек (время выполнения запроса смотрю по разнице между getdate()).

4. Stop|Start серверу, запускаю profiler, затем все запросы в указанном ниже порядке (не делаю Stop|Start для каждого эксперимента, т.к. для старого драйвера и запроса с 2 TOP+подзапросом разницы от повторных запусков почти нет). ниже результаты значимых столбцов из trace.
что			CPU	Reads	Writes	Duration
старый драйвер		2625	254997	1144	14060
новый драйвер		672	2336	0	576
2 TOP + subquery	735	5346	0	1923
mssql драйвер		718	3192	0	3876
делаю вывод, что новый механизм (readonly курсор) -- лучший вариант :)


собрал и выложил обновленный драйвер и его исходники.