Я относительно новичок в python и использую pytables для хранения некоторых геномных аннотаций в hdf для более быстрого запроса. Я считаю, что запрос несовпадающей строки в таблице выполняется медленно, но я не знаю, как оптимизировать его для повышения производительности.
Ниже показана одна из таблиц:
In [5]: t
Out[5]:
/gene/annotation (Table(315202,), fletcher32, blosc(5)) ''
description := {
"name": StringCol(itemsize=36, shape=(), dflt='', pos=0),
"track": StringCol(itemsize=12, shape=(), dflt='', pos=1),
"etype": StringCol(itemsize=12, shape=(), dflt='', pos=2),
"event": StringCol(itemsize=36, shape=(), dflt='', pos=3)}
byteorder := 'irrelevant'
chunkshape := (1365,)
autoindex := True
colindexes := {
"name": Index(9, full, shuffle, zlib(1)).is_csi=True}
Когда условие соответствует чему-то в таблице, timeit возвращается в микросекундах.
In [6]: timeit [x for x in t.where("name == 'record_exists_in_table'")]
10000 loops, best of 3: 109 µs per loop
Однако, когда я попытался найти несуществующую строку, она находится в миллисекундах.
In [8]: timeit [x for x in t.where("name == 'no_such_record'")]
10 loops, best of 3: 56 ms per loop
Буду очень признателен за любой совет, который укажет мне правильное направление!