ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [Comm] Производительность SQLite!
@ 2004-11-29 17:13 Roman Savochenko
  2004-11-29 21:18 ` Alexey Rusakov
  2004-12-02 14:19 ` Денис Смирнов
  0 siblings, 2 replies; 9+ messages in thread
From: Roman Savochenko @ 2004-11-29 17:13 UTC (permalink / raw)
  To: community

Всем привет!

Начал я тут пользовать SQLite 3.0, привязал к своему проекту, запустил 
тест и получил странный результат.
А странность заключается в низкой скорости. Ниже приведено сравнение с 
другими БД:
//-------------------------------------------------------------------------------------------------------------------------------------------------
Производятся операции над 200 записями (строками). Таблица состоит из 5 
колонок разных типов.                        
-------------------------------------------------------------------------------------------
Операции                         | SQLite   | DBF(своя реализ) | MySQL |
--------------------------------------------------------------------------------------------
Создание 200 строк:     | 2.66 сек |  0.05 сек                  | 
0.19      |
Обновление 200 строк: | 2.73 сек |  0.06 сек                  | 0.18      |
Получение 200 строк:    | 0.09 сек |  0.06 сек                  | 
0.12      |
Удаление 200 строк:      | 2.25 сек |  0.01 сек                  | 
0.12      |
//-------------------------------------------------------------------------------------------------------------------------------------------------

Может там чего настроить нужно?
А то, что-то, он далеко не быстрый.

С уважением Роман!


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-29 17:13 [Comm] Производительность SQLite! Roman Savochenko
@ 2004-11-29 21:18 ` Alexey Rusakov
  2004-11-30  7:22   ` Roman Savochenko
  2004-12-02 14:19 ` Денис Смирнов
  1 sibling, 1 reply; 9+ messages in thread
From: Alexey Rusakov @ 2004-11-29 21:18 UTC (permalink / raw)
  To: community

On 29.11.2004 20:13, Roman Savochenko wrote:
> Всем привет!
> 
> Начал я тут пользовать SQLite 3.0, привязал к своему проекту, запустил 
> тест и получил странный результат.
> А странность заключается в низкой скорости. Ниже приведено сравнение с 
> другими БД:
> //-------------------------------------------------------------------------------------------------------------------------------------------------
> Производятся операции над 200 записями (строками). Таблица состоит из 5 
> колонок разных типов.                        
> -------------------------------------------------------------------------------------------
> Операции                         | SQLite   | DBF(своя реализ) | MySQL |
> --------------------------------------------------------------------------------------------
> Создание 200 строк:     | 2.66 сек |  0.05 сек                  | 
> 0.19      |
> Обновление 200 строк: | 2.73 сек |  0.06 сек                  | 0.18      |
> Получение 200 строк:    | 0.09 сек |  0.06 сек                  | 
> 0.12      |
> Удаление 200 строк:      | 2.25 сек |  0.01 сек                  | 
> 0.12      |
> //-------------------------------------------------------------------------------------------------------------------------------------------------
> 
> Может там чего настроить нужно?
> А то, что-то, он далеко не быстрый.
Какие индексы определены? Какие запросы выполнялись?

-- 
   Alexey "Ktirf" Rusakov


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-29 21:18 ` Alexey Rusakov
@ 2004-11-30  7:22   ` Roman Savochenko
  2004-11-30 10:08     ` Evgeniy Kobzev
  0 siblings, 1 reply; 9+ messages in thread
From: Roman Savochenko @ 2004-11-30  7:22 UTC (permalink / raw)
  To: community

Alexey Rusakov wrote:

> On 29.11.2004 20:13, Roman Savochenko wrote:
>
>> Всем привет!
>>
>> Начал я тут пользовать SQLite 3.0, привязал к своему проекту, 
>> запустил тест и получил странный результат.
>> А странность заключается в низкой скорости. Ниже приведено сравнение 
>> с другими БД:
>> //------------------------------------------------------------------------------------------------------------------------------------------------- 
>>
>> Производятся операции над 200 записями (строками). Таблица состоит из 
>> 5 колонок разных типов.                        
>> ------------------------------------------------------------------------------------------- 
>>
>> Операции                         | SQLite   | DBF(своя реализ) | MySQL |
>> -------------------------------------------------------------------------------------------- 
>>
>> Создание 200 строк:     | 2.66 сек |  0.05 сек                  | 
>> 0.19      |
>> Обновление 200 строк: | 2.73 сек |  0.06 сек                  | 
>> 0.18      |
>> Получение 200 строк:    | 0.09 сек |  0.06 сек                  | 
>> 0.12      |
>> Удаление 200 строк:      | 2.25 сек |  0.01 сек                  | 
>> 0.12      |
>> //------------------------------------------------------------------------------------------------------------------------------------------------- 
>>
>>
>> Может там чего настроить нужно?
>> А то, что-то, он далеко не быстрый.
>
> Какие индексы определены? Какие запросы выполнялись?

Адресация производится по ключевым полям, в случае с тестом это одно 
ключевое поле "name" типа TEXT.
Обращаюсь к БД с помощью функции sqlite3_get_table(); обёрта над этой 
функцией практически такая же как и для
MySQL.
SQL запросы такиеже как и для MySQL: CREATE, INSERT, UPDATE, SELECT, DROP.
В дополнении к вопросу производительности возникло ещё парочка:
- Как получить, просто, список колонок в таблице?
В MySQL это делается запросом типа <SELECT * FROM "tbl1" WHERE 0>
- Есть имена колонок на которые SQLite ругается. Например на запрос:
CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" TEXT);
Ругается: <Request error: near "TABLE": syntax error>.
По мне, так это недопустимо!
Да и в MySQL такого безобразия нет.

С уважением Роман!


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-30  7:22   ` Roman Savochenko
@ 2004-11-30 10:08     ` Evgeniy Kobzev
  2004-11-30 16:08       ` Roman Savochenko
  2004-12-01 10:05       ` Roman Savochenko
  0 siblings, 2 replies; 9+ messages in thread
From: Evgeniy Kobzev @ 2004-11-30 10:08 UTC (permalink / raw)
  To: community

Roman Savochenko пишет:
> В дополнении к вопросу производительности возникло ещё парочка:
> - Как получить, просто, список колонок в таблице?
> В MySQL это делается запросом типа <SELECT * FROM "tbl1" WHERE 0>

В MySQL в ответ на такой запрос получим:
mysql> select * from contacts where 0;
Empty set (0.00 sec)

Видимо имелось ввиду
SHOW FIELDS FROM contacts;

А в SQLite это скорее всего
sqlite> .schema

или

sqlite> PRAGMA table_info(test2);
cid         name        type        notnull     dflt_value  pk
----------  ----------  ----------  ----------  ----------  ----------
0           name        TEXT        0                       1
1           num         DOUBLE      0                       0
2           TABLE       TEXT        0                       0

> - Есть имена колонок на которые SQLite ругается. Например на запрос:
> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" TEXT);
> Ругается: <Request error: near "TABLE": syntax error>.

Неправда.

sqlite> .schema test2
CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" TEXT);

Как видите - всё создалось.
Просто помните про, 'TABLE', "TABLE" и [TABLE]
Почитайте про ключевые слова.

> По мне, так это недопустимо!
> Да и в MySQL такого безобразия нет.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-30 10:08     ` Evgeniy Kobzev
@ 2004-11-30 16:08       ` Roman Savochenko
  2004-11-30 16:46         ` Roman Savochenko
  2004-12-01 10:05       ` Roman Savochenko
  1 sibling, 1 reply; 9+ messages in thread
From: Roman Savochenko @ 2004-11-30 16:08 UTC (permalink / raw)
  To: community

Evgeniy Kobzev wrote:

> Roman Savochenko пишет:
>
>> В дополнении к вопросу производительности возникло ещё парочка:
>> - Как получить, просто, список колонок в таблице?
>> В MySQL это делается запросом типа <SELECT * FROM "tbl1" WHERE 0>
>
> В MySQL в ответ на такой запрос получим:
> mysql> select * from contacts where 0;
> Empty set (0.00 sec)
>
> Видимо имелось ввиду
> SHOW FIELDS FROM contacts;

В C-API при запросе <select * from contacts where 0;>
Возвращается шапка.

> А в SQLite это скорее всего
> sqlite> .schema
>
> или
>
> sqlite> PRAGMA table_info(test2);
> cid         name        type        notnull     dflt_value  pk
> ----------  ----------  ----------  ----------  ----------  ----------
> 0           name        TEXT        0                       1
> 1           num         DOUBLE      0                       0
> 2           TABLE       TEXT        0                       0

Спасибо вещь полезная. А чего нибуть стандартного нет?

>> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" 
>> TEXT);
>> Ругается: <Request error: near "TABLE": syntax error>.
>
> - Есть имена колонок на которые SQLite ругается. Например на запрос:
>
> Неправда.
>
> sqlite> .schema test2
> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" 
> TEXT);
>
> Как видите - всё создалось.
> Просто помните про, 'TABLE', "TABLE" и [TABLE]
> Почитайте про ключевые слова.

Из командной строки работает, а вот через C-API имеем:
//==============================================================
TEST 03: query: <CREATE TABLE "controllers" ("NAME" TEXT PRIMARY KEY 
,"MODUL" TEXT ,"BDTYPE" TEXT ,"BDNAME" TEXT ,"TABLE" TEXT );>
SYS| kernel1:Controller:sqlite: near "TABLE": syntax error
//==============================================================
Или он там экранирует ковычки?

P.S. С производительностью разобрался. Надо брать в <BEGIN; expresion; 
COMMIT;>

С уважением Роман!


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-30 16:08       ` Roman Savochenko
@ 2004-11-30 16:46         ` Roman Savochenko
  0 siblings, 0 replies; 9+ messages in thread
From: Roman Savochenko @ 2004-11-30 16:46 UTC (permalink / raw)
  To: community

Roman Savochenko wrote:

>>> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" 
>>> TEXT);
>>> Ругается: <Request error: near "TABLE": syntax error>.
>>
>> - Есть имена колонок на которые SQLite ругается. Например на запрос:
>>
>> Неправда.
>>
>> sqlite> .schema test2
>> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" 
>> TEXT);
>>
>> Как видите - всё создалось.
>> Просто помните про, 'TABLE', "TABLE" и [TABLE]
>> Почитайте про ключевые слова.
>
>
> Из командной строки работает, а вот через C-API имеем:
> //==============================================================
> TEST 03: query: <CREATE TABLE "controllers" ("NAME" TEXT PRIMARY KEY 
> ,"MODUL" TEXT ,"BDTYPE" TEXT ,"BDNAME" TEXT ,"TABLE" TEXT );>
> SYS| kernel1:Controller:sqlite: near "TABLE": syntax error
> //==============================================================
> Или он там экранирует ковычки?

Разобрался, это боком вылазили INSERT и UPDATE без кавычек.

Большое спасибо за помощь!

С уважением Роман!


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-30 10:08     ` Evgeniy Kobzev
  2004-11-30 16:08       ` Roman Savochenko
@ 2004-12-01 10:05       ` Roman Savochenko
  2004-12-01 10:30         ` Evgeniy Kobzev
  1 sibling, 1 reply; 9+ messages in thread
From: Roman Savochenko @ 2004-12-01 10:05 UTC (permalink / raw)
  To: community

Evgeniy Kobzev wrote:

> Roman Savochenko пишет:
>
>> В дополнении к вопросу производительности возникло ещё парочка:
>> - Как получить, просто, список колонок в таблице?
>> В MySQL это делается запросом типа <SELECT * FROM "tbl1" WHERE 0>
>
> В MySQL в ответ на такой запрос получим:
> mysql> select * from contacts where 0;
> Empty set (0.00 sec)
>
> Видимо имелось ввиду
> SHOW FIELDS FROM contacts;
>
> А в SQLite это скорее всего
> sqlite> .schema
>
> или
>
> sqlite> PRAGMA table_info(test2);
> cid         name        type        notnull     dflt_value  pk
> ----------  ----------  ----------  ----------  ----------  ----------
> 0           name        TEXT        0                       1
> 1           num         DOUBLE      0                       0
> 2           TABLE       TEXT        0                       0
>
>> - Есть имена колонок на которые SQLite ругается. Например на запрос:
>> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" 
>> TEXT);
>> Ругается: <Request error: near "TABLE": syntax error>.
>
> Неправда.
>
> sqlite> .schema test2
> CREATE TABLE "test2" ("name" TEXT PRIMARY KEY, "num" DOUBLE, "TABLE" 
> TEXT);
>
> Как видите - всё создалось.
> Просто помните про, 'TABLE', "TABLE" и [TABLE]
> Почитайте про ключевые слова.

Евгений, ещё один вопрос можно? :)

Очередное подозрение на грабли в C-API.
Почему если запрашивать <SELECT name FROM "test00" WHERE "name"='Sh2';>
получаю имена колонок: <name>
А если <SELECT "name" FROM "test00" WHERE "name"='Sh2';>
то имена колонок: <"name">;
Подозрительная неоднозначность!

С уважением Роман!


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-12-01 10:05       ` Roman Savochenko
@ 2004-12-01 10:30         ` Evgeniy Kobzev
  0 siblings, 0 replies; 9+ messages in thread
From: Evgeniy Kobzev @ 2004-12-01 10:30 UTC (permalink / raw)
  To: community

Roman Savochenko пишет:
> 
> Евгений, ещё один вопрос можно? :)
> 
> Очередное подозрение на грабли в C-API.
> Почему если запрашивать <SELECT name FROM "test00" WHERE "name"='Sh2';>
> получаю имена колонок: <name>
> А если <SELECT "name" FROM "test00" WHERE "name"='Sh2';>
> то имена колонок: <"name">;
> Подозрительная неоднозначность!
> 

Я не уверен, но скорее всего дело вот в чём.
Имена колонок могут быть как "простыми" (field_one, field_two), так 
"сложными" ("this my super field"). Т.е. с пробелами и без.
Так вот SQLite скорее всего смотрит, если имя без кавычек, то оно 
простое, и возвращает его как простое имя, а если имя в кавычках, то и 
возвращает его в кавычках, даже если оно простое.
Если хозяин написал в кавычках, значит ему ему виднее :)
Но повторюсь, это сугубо мое мнение.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Comm] Производительность SQLite!
  2004-11-29 17:13 [Comm] Производительность SQLite! Roman Savochenko
  2004-11-29 21:18 ` Alexey Rusakov
@ 2004-12-02 14:19 ` Денис Смирнов
  1 sibling, 0 replies; 9+ messages in thread
From: Денис Смирнов @ 2004-12-02 14:19 UTC (permalink / raw)
  To: Roman Savochenko; +Cc: community

On Mon, Nov 29, 2004 at 07:13:33PM +0200, Roman Savochenko wrote:

RS> Может там чего настроить нужно?
RS> А то, что-то, он далеко не быстрый.

Если делаете вставку большого количества строк, то делать надо так:
BEGIN;
кучка-insert'ов
COMMIT;

Получите ускорение на порядок по крайней мере.

Для ускорения SELECT'ов обязательно делать индексы.

-- 
С уважением, Денис

http://freesource.info



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2004-12-02 14:19 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-11-29 17:13 [Comm] Производительность SQLite! Roman Savochenko
2004-11-29 21:18 ` Alexey Rusakov
2004-11-30  7:22   ` Roman Savochenko
2004-11-30 10:08     ` Evgeniy Kobzev
2004-11-30 16:08       ` Roman Savochenko
2004-11-30 16:46         ` Roman Savochenko
2004-12-01 10:05       ` Roman Savochenko
2004-12-01 10:30         ` Evgeniy Kobzev
2004-12-02 14:19 ` Денис Смирнов

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git