Время выполнения запросов SQLite
#1

Здравствуйте, я по такому вопросу:
Использую на своем сервере SQLite базу данных (стандартный a_sampdb.inc):
Время выполнения запросов типа SELECT не более 2 ms ( для сложных - около 5 ms ), а запросов типа UPDATE - около 150 ms, и мне кажется, что это слишком много!
Скажите пожалуйста, это нормально или нет?
- - - - -
Да, и какова максимальная длинна запроса при использовании db_query ?
Reply
#2

успеешь моргнуть за это время тогда это удет много.
Хочешь покажу запросы которые выполняются по 30 минут?

максимальной длины нет.
Reply
#3

Quote:
Originally Posted by Stepashka
View Post
Хочешь покажу запросы которые выполняются по 30 минут?
Хочу.
Reply
#4

Наслаждайся
Code:
    SELECT u.`id` object_id, 3 object_type, 3 object_weight,
    CONCAT ( '/movies/archive/', u.`id` ) `link`,
    CONCAT(
      IF (
        ( (u.`original_name` IS NOT NULL) && (u.`original_name` != '') ),
        CONCAT ( u.`name`, ' – ', u.`original_name` ),
        u.`name`
      ),
      ' (',
      IF (
        (u.`produced_end` > 0),
        CONCAT ( u.`produced_start`, ' – ', u.`produced_end` ),
        u.`produced_start`
      ),
      ')'
    ) AS `title`,
    CONCAT(
    	GROUP_CONCAT( t.`name` SEPARATOR ', ' ),
        ', ',
        GROUP_CONCAT( p.`local_name` SEPARATOR ', ' ),
        ', ',
        GROUP_CONCAT( p.`original_name` SEPARATOR ', ' )
        ) `tags`,
    CONCAT ( u.`announce`, ' ', u.`description` ) `text`,
    UNIX_TIMESTAMP( u.`updated` ) `pub`,
    rr.`sum` `rate`
    FROM `video_units` AS u 
    LEFT JOIN `tags2objects` AS t2o 
      ON t2o.`object_id` = u.`id`
      AND t2o.`object_type_id` = 3
      AND t2o.`tag_group_id` IN (2, 8, 6)
    LEFT JOIN `tags` AS t
      ON t.`tag_id` = t2o.`tag_id`
    LEFT JOIN `object2object` AS o2o 
      ON o2o.`related_object_id` = u.`id`
      AND o2o.`relation_type_id` IN (47, 54, 55, 56, 57, 58)
    LEFT JOIN `persons` AS p
      ON p.`id` = o2o.`object_id`
    LEFT JOIN `rating_result` AS rr
      ON rr.`object_type` = 3
      AND rr.`object_id` = u.`id`
#    WHERE (DATE_ADD(u.`updated`, INTERVAL 30 MINUTE) > NOW())
    GROUP BY u.`id`
это 1 запрос
Reply
#5

степаха выложи этот идиотизм на говнокод...
Reply
#6

Quote:
Originally Posted by Romanius
View Post
степаха выложи этот идиотизм на говнокод...
всмысле, какой код?
Reply
#7

возможно он имел в виду постбин
Reply
#8

не, он имел ввиду http://govnokod.ru/
Reply
#9

ахах, даже на знал о существовании такого сайта) Интересно)
Reply
#10

Этот скрипт создает таблицу индексов для поисковой системы сфинкс.
А время такое огромне потому что таблицу стыкует на миллион строк два раза.
Так что уважаемый Romanius, если тут где-то и есть говно, то это только ваш пост. И мой вам совет пойдите подучитесь чтобы такой бред больше не писать.
Reply
#11

ай какие выепоны ))

Про скорость sqlite смотрите здесь: http://www.sqlite.org/speed.html
Reply
#12

всё-таки скорость зависит от многих факторов, думаю, главные из них - конфиг железа и его свобода от параллельных задач
Reply
#13

я про то что этот запрос никаким боком не подходит к SQLite.
Reply
#14

Quote:
Originally Posted by Romanius
View Post
я про то что этот запрос никаким боком не подходит к SQLite.
т.е ты не читал ппосты до него и увидев запрос тупо ляпнул первое что пришло в голову?
Reply
#15

степаха, это SQL запрос. И он может работать как и под Oracle так и под MySQL, но SQLite под такое не расчитывалось.
Reply
#16

Quote:
Originally Posted by Romanius
View Post
степаха, это SQL запрос. И он может работать как и под Oracle так и под MySQL, но SQLite под такое не расчитывалось.
ответь мне на простой вопрос, почему я тут его разместил?
Reply
#17

Не хотелось создавать новую тему, решил спросить здесь.
На сервере храню информацию об автомобилях в SQLite. Возникает необходимость периодически (раз в несколько минут) сохранять координаты автомобилей в базу данных.
Формирую по таймеру SQL запросы вида:

UPDATE `VEHICLES` X = -1990.128540, Y = 276.264617, Z = 35.251308, ANGLE = 270.000000 WHERE ID = 0
UPDATE `VEHICLES` SET X = -1990.087280, Y = 272.059844, Z = 34.907825, ANGLE = 270.000000 WHERE ID = 1

И так для всех автомобилей. У меня их несколько сотен => время выполнения в районе секунды. В это время сервер "висит".

Кто может подсказать грамотное решение проблемы? Есть мысль вынести сохранение в отдельный поток, тогда сервер будет во время сохранения отвечать на запросы. Однако волнует вопрос надежности, ведь PAWN не является потокобезопасным языком. Если эта мысль имеет смысл, подскажите какой плагин для многопоточности лучше использовать?
Reply
#18

Записывать(обновлять) в БД данные только тех машин, у которых произошли изменения.
Если возможность есть, можно воспользоваться внешней БД( необязательно на другой машине).
Reply
#19

Quote:
Originally Posted by grekon
View Post
Не хотелось создавать новую тему, решил спросить здесь.
На сервере храню информацию об автомобилях в SQLite. Возникает необходимость периодически (раз в несколько минут) сохранять координаты автомобилей в базу данных.
Формирую по таймеру SQL запросы вида:

UPDATE `VEHICLES` X = -1990.128540, Y = 276.264617, Z = 35.251308, ANGLE = 270.000000 WHERE ID = 0
UPDATE `VEHICLES` SET X = -1990.087280, Y = 272.059844, Z = 34.907825, ANGLE = 270.000000 WHERE ID = 1

И так для всех автомобилей. У меня их несколько сотен => время выполнения в районе секунды. В это время сервер "висит".

Кто может подсказать грамотное решение проблемы? Есть мысль вынести сохранение в отдельный поток, тогда сервер будет во время сохранения отвечать на запросы. Однако волнует вопрос надежности, ведь PAWN не является потокобезопасным языком. Если эта мысль имеет смысл, подскажите какой плагин для многопоточности лучше использовать?
ID проиндексируй в таблице
Reply
#20

Quote:
Originally Posted by Jon_De
View Post
ID проиндексируй в таблице
уникальные ключи всегда имеют индекс.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)