Ой, подожди. Исходный ответ приведен ниже, но, глядя на ваш код, вы, возможно, повторяете свой запрос для каждой строки в результате.
Вам необходимо показать нам код над оператором while
, который изначально создает и заполняет query
.
Оригинальный ответ:
Ваш поиск нельзя оптимизировать с помощью индекса, поскольку у вас есть подстановочный знак в начале вашего поискового запроса. Вы можете сделать следующее:
Удалите подстановочный знак в начале поиска и потребуйте, чтобы пользователь ввел первые несколько символов имени (а не символы в любом месте имени). Вам нужно убедиться, что в столбце name
есть индекс.
Примените дополнительные критерии для ограничения количества имен, которые должен выполнять оператор SQL (например, почтовый индекс). Вам нужно убедиться, что есть индекс в другом столбце, который вы ищете.
Изучение пользователя полнотекстового индексирования и поиска.
На самом деле это не вопрос Python или QT, а скорее вопрос, касающийся любой базы данных SQL, в которую вы отправляете свой запрос.
Наконец, ваш код потерпит неудачу, если имя, которое вводит пользователь, содержит апостроф (например, имя O'Reilly) и находится под угрозой атаки SQL-инъекцией. Вы должны переключиться на параметризованный запрос, что-то вроде следующего (в частности, я не знаю интерфейс PyQT):
query.exec_("SELECT * FROM test WHERE name LIKE ?;" ("%"+line3+"%"))