LINUX.ORG.RU

Python, сильнейшая регрессия SELECT при fetchall()

 ,


1

1

Всем доброго времени суток!

Имеется небольшой код который создаёт базу и туда закидывает тестовые данные, а затем делает обращение к базе SELECT запросом:

@profile # декоратор для профайлера
def do():
    import os
    import sqlite3

    # смотрим есть ли уже база на дсике
    is_db_exist = os.path.isfile('./123.db')
    print('is_db_exist: {}'.format(is_db_exist))
    # return

    db = sqlite3.connect('123.db')

    # базы на диске нет, значит создаём структуру и добавляем данные
    if not is_db_exist:
        # создаём базу
        db.execute('''
        CREATE TABLE task_list (
        id INTEGER PRIMARY KEY AUTOINCREMENT
        );
        ''')
        db.execute('''
        CREATE TABLE dict (
        id      INTEGER PRIMARY KEY AUTOINCREMENT,
        [key]   TEXT,
        value   TEXT,
        task_id   REFERENCES task_list (id)
        );
        ''')

        db.execute("INSERT INTO task_list (id) VALUES (NULL);")
        db.commit()

        # добавляем тестовые записи
        for i in range(300000):
            db.execute('''
            INSERT INTO 'dict' ('task_id', 'key', 'value') VALUES
                          ('{0}', 'key_1', 'data_1'),
                          ('{0}', 'key_2', 'data_2'),
                          ('{0}', 'key_3', 'data_3'),
                          ('{0}', 'key_4', 'data_4')
            '''.format(i))

        db.commit()

        # проверяем что всё нормально добавилось
        total_added = db.execute('SELECT count(*) from dict;').fetchall()[0][0]
        print('добавлено записей: {}'.format(total_added))

    got = db.execute('select [key], value from dict where task_id like 1')
    fetched = got.fetchall() # вот этот кусок выполняется целых 0.5 секунд, вместо 0.001 секунд

    db.close()

do()

Обратите внимание на этот кусок кода:

    fetched = got.fetchall() # вот этот кусок выполняется целых 0.5 секунд, вместо 0.001 секунд

На одной машине (windows 7) он выполняется целых 0.5 секунд, а на другой (windows 8) 0.001 секунд.

Откуда-то взялась колоссальная регрессия. Я пробовал обновлять питон до последней версии 3.5.3 (в пределах ветки 3.5 эта версия последняя), но толку нету.

На стэке пишут надо добавить индексы и будет всё хорошо, но что-то мне они не помогли.

Коллеги, куда копать, что делать?


Ответ на: комментарий от pod

Очень сильный совет, огромное спасибо! Вот благодаря таким советам освобождаюсь постепенно от говнокодерских привычек. ЛОР хорошо оздоравливает.

rubro
() автор топика
Ответ на: комментарий от rubro

Слово регрессия, которое здесь абсолютно не к месту - знаете, а о том, что числа в базу без кавычек пишутся - не знаете. Программисты - они такие...

DRVTiny ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.