sql >> Databáze >  >> RDS >> Mysql

Nastavení hodnoty jednoho sloupce ze všech řádků je velmi pomalé

V InnoDB update příkazy uzamknou každý řádek, který naskenují. To znamená, že k aktualizaci vašich 200 řádků je třeba vytvořit 350 000 zámků na úrovni řádků, přičemž zároveň musí zachovat zámek vrácení zpět a poskytnout předchozí hodnotu všem transakcím, které čtou již změněnou hodnotu (protože transakce není potvrzeno a změna není konečná)

MyISAM na druhé straně uzamkne celý stůl.

Pokud tedy potřebujete aktualizovat všechny řádky, uzamkněte celou tabulku a získáte mnohem lepší výkon (nebudete potřebovat zámky na úrovni řádků)

Ale ještě lépe, poskytněte klauzuli WHERE, jako jste to udělali vy, a InnoDB získá zámky pouze pro odpovídající řádky (stejně jako některé zámky mezer v indexovém stromu, ale to je mimo rozsah této otázky)



  1. Konvence pojmenování PHP/MySQL:camelCase vs under_score?

  2. Použití Pythonu pro přístup k SQL s názvem proměnného sloupce

  3. Jaký je limit velikosti pro argument podprogramu varchar2 PL/SQL v Oracle?

  4. Jak VLOŽIT, pokud řádek neexistuje (UPSERT) v MySQL