sql >> Databáze >  >> RDS >> PostgreSQL

Jak zrychlíte Python / PostgreSQL?

Neztrácejte čas profilováním. Čas je vždy v databázových operacích. Dělejte co nejméně. Jen minimální počet vložek.

Tři věci.

Jeden. Nevybírejte znovu a znovu, abyste odpovídali dimenzím Datum, Název hostitele a Osoba. Načtěte všechna data JEDNOU do slovníku Pythonu a použijte je v paměti. Neprovádějte opakované výběry. Použijte Python.

Dva. Neaktualizovat.

Konkrétně to nedělejte. Je to špatný kód ze dvou důvodů.

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

Nahradí se jednoduchým SELECT COUNT(*) FROM ... . Nikdy neaktualizujte pro zvýšení počtu. Stačí spočítat řádky, které tam jsou, pomocí příkazu SELECT. [Pokud to nemůžete udělat pomocí jednoduchého SELECT COUNT nebo SELECT COUNT(DISTINCT), chybí vám některá data – váš datový model by měl vždy poskytovat správné úplné počty. Nikdy neaktualizovat.]

A. Nikdy nevytvářejte SQL pomocí substituce řetězců. Úplně hloupý.

Pokud z nějakého důvodu SELECT COUNT(*) není dostatečně rychlý (nejdříve srovnávejte, než uděláte něco lame), můžete výsledek počítání uložit do mezipaměti v jiné tabulce. PO všech nákladech. Proveďte SELECT COUNT(*) FROM whatever GROUP BY whatever a vložte to do tabulky počtů. Neaktualizovat. Nikdy.

Tři. Použijte Bind Variables. Vždy.

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

SQL se nikdy nemění. Vázané hodnoty se mění, ale SQL se nikdy nemění. Tohle je MNOHEM rychlejší. Nikdy nevytvářejte příkazy SQL dynamicky. Nikdy.



  1. Jak napsat příkaz select pomocí vnořeného spojení

  2. Existuje způsob, jak se vyhnout řazení souborů, když se pořadí podle liší od klauzule where?

  3. Talend, jak zkopírovat jednu db do druhé

  4. Jak vložit více hodnot / proměnných do databáze MySql