30,000 を超えるテーブルと、各テーブルに最大 40 ~ 100 行のデータベースがあります。特定の列の下に文字列を含むテーブル名のリストを取得したいと考えています。
たとえば、次のようになります。
「foo」を含むすべてのテーブルの名前を取得したい...
Database
Table_1
ID: 1, STR: bar
ID: 2, STR: foo
ID: 3, STR: bar
Table_2
ID: 1, STR: bar
ID: 2, STR: bar
ID: 3, STR: bar
Table_3
ID: 1, STR: bar
ID: 2, STR: bar
ID: 3, STR: foo
したがって、この場合、関数は ['Table_1', 'Table_3'] を返す必要があります。
これまでのところ、問題なく動作しますが、実行に 2 分以上かかります。これは、私が考えているアプリケーションには長すぎます。
self.m('SHOW TABLES')
result = self.db.store_result()
tablelist = result.fetch_row(0, 1)
for table in tablelist:
table_name = table['Tables_in_definitions']
self.m("""SELECT `def` FROM `""" + table_name + """` WHERE `def` = '""" + str + """'""")
result = self.db.store_result()
r = result.fetch_row(1, 1)
if len(r) > 0:
results.append(table_name)
私はこれをスピードアップする方法を思いつくほど頭が良くないので、誰か提案があれば大歓迎です、ありがとう!