Gå til innhold

[Løst]Verifisere at Kolonne Eksisterer


Anbefalte innlegg

Hei igjen!

 

Trenger hjelp med en liten sak. Jeg skal verifisere en del kolonner eksisterer. For dette pruker jeg SELECT * og ser om jeg får noe error. Men dette er en tabel som vokser hele tiden og hver gang jeg gjør sjekken tar det lenger og lenger tid ettersom tabellen blir større og større. Er det en metode jeg kan benytte for å sjekke om kolonnen eksisterer som ikke krever at den ser igjennom hele kolonnen? Altså at hastigheten på spørringen er uavhingig av antall rader i tabellen?

Lenke til kommentar
Videoannonse
Annonse

SELECT count(*) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='SeaWolfSchema' AND TABLE_NAME='fish' AND COLUMN_NAME='id';

 

akkurat hvorfor mysql bruker lengre og lengre tid på å se at noe er galt når du bruker select-metoden og tabellen for fler og fler felt skjønner jeg ikke helt.

 

medmindre databasen/applikasjonen din har et ekstremt sært bruksområde kan det at du forandrer skjema hele tiden kanskje tyde på at du bruker litt feil fremgangsmåte.

 

PS, dette gjelder for mysql, aner ikke hva du bruker.

Endret av quantum
Lenke til kommentar
SELECT count(*) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='SeaWolfSchema' AND TABLE_NAME='fish' AND COLUMN_NAME='id';

 

akkurat hvorfor mysql bruker lengre og lengre tid på å se at noe er galt når du bruker select-metoden og tabellen for fler og fler felt skjønner jeg ikke helt.

 

medmindre databasen/applikasjonen din har et ekstremt sært bruksområde kan det at du forandrer skjema hele tiden kanskje tyde på at du bruker litt feil fremgangsmåte.

 

PS, dette gjelder for mysql, aner ikke hva du bruker.

 

Heisann og takk for svar. Desverre har jeg prøvd den metoden også og den bruker også ganske lang tid. Tabellen får flere rader fordi den logger tidsserie data og vokser dermed kontinuerlig. (den blir purga ved gjevne mellomrom så den ikke vokser seg for stor). Når jeg bruker SELECT vil den naturligvis bruke lange tid HVIS kolonnen eksisterer fordi den da vil prøve å hente opp all data fra den kolonnen. Noe som vil ta lenger tid jo større tabellen er. COUNT har det samme problemet ettersom den da teller antall rader, noe som også tar lenger tid jo større tabellen er.

 

Grunnen til a jeg gjør denne sjekken er for å kunne legge til og slette kolonner etter ønske (hvilke verdier som skal logges i tabellen).

Lenke til kommentar
Grunnen til a jeg gjør denne sjekken er for å kunne legge til og slette kolonner etter ønske (hvilke verdier som skal logges i tabellen).

 

[...]

 

Tabellen får flere rader fordi den logger tidsserie data og vokser dermed kontinuerlig

 

Ja, tja ... man kan sikkert diskutere om det er bra praksis å drive å endre skjemaet sånn hele tiden. At en tabell får fler og fler RADER er forøvrig helt normalt, fler og fler KOLONNER er ikke så vanlig. Du har kanskje dine grunner, eller bruker kanskje ikke beste tilnærming.

 

Jeg er ganske overrasket over at det tar så lang tid å avgjøre om en kolonne eksisterer eller ikke. F.eks. DESC <TABLENAME> - som jeg antar benytter seg av meta-skjemaet - pleier å gå lynraskt.

 

Det som overrasker meg enda mer er at du i det heletatt får gjort noe som helst når du driver og endrer skjema på tabeller som inneholder mye data, da er nemlig MySQL treig som sirup (vi snakker opp mot timer ... alt avhengig av ditt og datt, selvsagt), og lager i realiteten en ny kopi av tabellen hver gang. Men du tømmer kanskje tabellene først, da burde det ikke være noe probl.

Endret av quantum
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...