PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да направите Python / PostgreSQL по-бърз?

Не губете време за профилиране. Времето винаги е в операциите на базата данни. Правете възможно най-малко. Само минималния брой вмъквания.

Три неща.

един. Не ИЗБИРАЙТЕ отново и отново, за да съответствате на измеренията Дата, Име на хост и Лице. Извлечете всички данни ВЕДНЪЖ в речник на Python и ги използвайте в паметта. Не правете повтарящи се сингълтън селекции. Използвайте Python.

две. Не актуализирай.

По-конкретно, не правете това. Това е лош код по две причини.

cursor.execute("UPDATE people SET chats_count = chats_count + 1 WHERE id = '%s'" % person_id)

Той може да бъде заменен с обикновен SELECT COUNT(*) FROM ... . Никога не актуализирайте, за да увеличите броя. Просто пребройте редовете, които са там, с оператор SELECT. [Ако не можете да направите това с обикновен SELECT COUNT или SELECT COUNT(DISTINCT), ви липсват някои данни -- вашият модел на данни трябва винаги да предоставя правилни пълни преброявания. Никога не актуализирайте.]

И. Никога не създавайте SQL чрез заместване на низове. Напълно тъпо.

Ако по някаква причина SELECT COUNT(*) не е достатъчно бърз (първо бенчмарк, преди да направите нещо куцо) можете да кеширате резултата от преброяването в друга таблица. СЛЕД всички натоварвания. Направете SELECT COUNT(*) FROM whatever GROUP BY whatever и вмъкнете това в таблица с преброявания. Не актуализирайте. Някога.

Три. Използвайте свързващи променливи. Винаги.

cursor.execute( "INSERT INTO ... VALUES( %(x)s, %(y)s, %(z)s )", {'x':person_id, 'y':time_to_string(time), 'z':channel,} )

SQL никога не се променя. Обвързаните стойности се променят, но SQL никога не се променя. Това е МНОГО по-бързо. Никога не създавайте SQL изрази динамично. Никога.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PSQLException:текущата транзакция е прекратена, командите се игнорират до края на блока на транзакцията

  2. CREATE SCHEMA IF NOT EXISTS предизвиква грешка при дублиране на ключ

  3. Предотвратяване на произхода на собствените съществителни в PostgreSQL?

  4. Как да накарам PostgreSQL тригера и C# Windows Service да работят заедно?

  5. PostgresSql:Сравняване на две таблици и получаване на техния резултат и сравнение с третата таблица