сокращение времени поиска из большой базы данных в python - PullRequest
1 голос
/ 14 ноября 2011

У меня большая база данных с идентификатором 10000. Когда я ищу имя в своей базе данных, это занимает много времени, и мне нужен способ сократить время на минимальное время ??Я использую этот способ:

while (query.next()):
              line3 = self.lineEdit_4.text()
              query.exec_("SELECT * FROM test WHERE name LIKE '%s';" % ("%"+line3+"%"))
              model = QSqlTableModel()
              model.setQuery(query)
              model.select()
              self.tableView.setModel(model)

1 Ответ

4 голосов
/ 14 ноября 2011

Ой, подожди. Исходный ответ приведен ниже, но, глядя на ваш код, вы, возможно, повторяете свой запрос для каждой строки в результате.

Вам необходимо показать нам код над оператором while, который изначально создает и заполняет query.

Оригинальный ответ:

Ваш поиск нельзя оптимизировать с помощью индекса, поскольку у вас есть подстановочный знак в начале вашего поискового запроса. Вы можете сделать следующее:

  1. Удалите подстановочный знак в начале поиска и потребуйте, чтобы пользователь ввел первые несколько символов имени (а не символы в любом месте имени). Вам нужно убедиться, что в столбце name есть индекс.

  2. Примените дополнительные критерии для ограничения количества имен, которые должен выполнять оператор SQL (например, почтовый индекс). Вам нужно убедиться, что есть индекс в другом столбце, который вы ищете.

  3. Изучение пользователя полнотекстового индексирования и поиска.

На самом деле это не вопрос Python или QT, а скорее вопрос, касающийся любой базы данных SQL, в которую вы отправляете свой запрос.

Наконец, ваш код потерпит неудачу, если имя, которое вводит пользователь, содержит апостроф (например, имя O'Reilly) и находится под угрозой атаки SQL-инъекцией. Вы должны переключиться на параметризованный запрос, что-то вроде следующего (в частности, я не знаю интерфейс PyQT):

 query.exec_("SELECT * FROM test WHERE name LIKE ?;" ("%"+line3+"%"))
...