* [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