sql >> Databasteknik >  >> RDS >> Mysql

MySQL:Många tabeller eller många databaser?

Det bör inte finnas någon signifikant prestandaskillnad mellan flera tabeller i en enda databas jämfört med flera tabeller i separata databaser.

I MySQL fungerar databaser (standard SQL använder termen "schema" för detta) främst som ett namnområde för tabeller. En databas har bara ett fåtal attribut, t.ex. standardteckenuppsättningen och sorteringen. Och den användningen av GRANT gör det bekvämt att kontrollera åtkomstbehörigheter per databas, men det har inget med prestanda att göra.

Du kan komma åt tabeller i vilken databas som helst från en enda anslutning (förutsatt att de hanteras av samma instans av MySQL Server). Du måste bara kvalificera tabellnamnet:

SELECT * FROM database17.accounts_table;

Detta är en rent syntaktisk skillnad. Det bör inte ha någon effekt på prestandan.

När det gäller lagring kan du inte organisera tabeller i en fil-per-databas som @Chris spekulerar. Med MyISAM-lagringsmotorn har du alltid en fil per tabell. Med InnoDB-lagringsmotorn har du antingen en enda uppsättning lagringsfiler som sammanslår alla tabeller, eller så har du en fil per tabell (detta är konfigurerat för hela MySQL-servern, inte per databas). I båda fallen finns det ingen prestandafördel eller nackdel med att skapa tabellerna i en enda databas jämfört med många databaser.

Det finns inte många MySQL-konfigurationsparametrar som fungerar per databas. De flesta parametrar som påverkar serverns prestanda är serverövergripande.

När det gäller säkerhetskopiering kan du ange en undergrupp av tabeller som argument till mysqldump kommando. Det kan vara bekvämare att säkerhetskopiera logiska uppsättningar tabeller per databas, utan att behöva namnge alla tabeller på kommandoraden. Men det borde inte göra någon skillnad för prestanda, bara bekvämlighet för dig när du anger backup-kommandot.



  1. Jämföra datum i Oracle SQL

  2. Ändra år i mysql date

  3. Ändra visningsformat för datum- och tidsfält i MySQL PHP

  4. Hur gör jag en IF...THEN i en SQL SELECT?