Do you see one major drawback of having 60 identical tables with different names now? You need to prepare 60 statements just to "SELECT value FROM table WHERE key = ?" and another 60 to "UPDATE table SET value = ? WHERE key = ?" and maybe even keep track of which you have and have not yet prepared. And do this for every connection. Unless your threads only ever read/write a distinst set of tables, and no two threads access the same table ever. That would be a use case for a separate SQLite db file for each thread, which would eliminate any contention.