Jump to content
php.lv forumi

Nedaudz par enum


Lynx

Recommended Posts

Šodien uzdūros interesantam rakstam, kas pastāstīja kā patiesībā strādā enum lauka tips un tas radīja uzreiz interesantus jautājumus, jo tieši tagad ar to jastrādā.

 

Attiecīgi, īsumā, piemēram, laukam ar tipu enum('0','1') vērtības datubāzes iekšienē tiek saglabātas kā 1,2 Un taisot selectu Select lauks FROM something WHERE lauks= 1, mums izvadīs 0. Bet WHERE lauks = "1" mums arī izvadīs to 1. Tas īstenībā, iespējams, kaut kad daudziem programmētājiem arī ir radījis neparedzētus rezultātus :)

 

Bet jautājums ir šāds: Parasti es lieku enum laukā int vērtības, piemēram '0','1','2','3' etc.(kas katra reprezentē kādu, piemēram, preces tipu). Jo uzskatīju, ja es vērsīšos pie int un selektošu kā WHERE lauks = "1", tas būs ātrāk, nekā ja es enum veidotu 'tips1','tips2' un selektotu kā WHERE lauks = "tips2".

 

Bet izlasot šo rakstu, cik es noprotu , es esmu būtiski kļūdījies savā uzskatā par ātrumu? Vai vislabākais(ņemot vērā ērtumu un ātrumu) variants nav veidot šādi: enum('tips1','tips2',etc) un selektot kā WHERE lauks = 1? Tas attiecīgi man novērstu nepieciešamību pēc komentāra šim laukam datubāzē, kas norāda katram ciparam atšifrējumu. Bet pats selekts notiku pēc iekšējās uzglabāšaas vērtības, kas vispār neliktu veikt satura apskati. Otrs jautājums, kā vispār ir ar tabulas lauku komentāriem? Tie kaut ko ietekmē no ātrdarbības viedokļa?

Link to comment
Share on other sites

Grūti teikt, bet teorētiski lauks = 'tips1', gadijumā mysql būtu javeic viens lieks solis un janoskaidro kura vērtība atbilst iekšējāi vērtībai, bet ja vēršamies pa taisno WHERE lauks = 1, teorētiski varētu iztikt bez tā viena soļa. Bet tā ir spekulācija.

 

Bet vairāk jautājums aiziet kādu variantu jūs izmantojat un kapēc tieši tā? Vai arī es te aizeju jau uz pārāk maznozīmīgiem jautājumiem datubāžu izstrādē? :)

Link to comment
Share on other sites

Nedaudz papētiju šo jautājumu internetā un izskatās, ka no ērtības ziņas un arī ātruma ziņā vislabāk gan ir izmantot enum un aizpildīt pašas vērtības, nevis atstāt kā '1','2', jo tas neko nemaina. Kā arī tinyint(1) mysql uztver kā bool, kas varētu radīt problēmas.

 

http://www.mysqlperformanceblog.com/2008/0...what-is-faster/

 

http://dev.mysql.com/doc/refman/4.1/en/oth...data-types.html

Link to comment
Share on other sites

bubu, jo: ALTER TABLE `items` CHANGE `type` `type` ENUM( 1, 2, 3 ) NOT NULL

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,2,3) NOT NULL' at line 1

 

Attiecīgi visām enum norādītajām vērtībām jatiek ievadītām pēdiņās. Ja pareizi sapratu tavu pretjautājumu uz manis teikto. Jo vienozīmīgi pašos ierakstos pēdiņas netiek lietotas un nemaz nevar tikt lietotas.

 

Marrtins, nu izlasot, ka tinyint ir bool, sapratu, ka var būt tikai divas vērtības. Tagad veicu testus un sapratu, ka esmu kļūdījies, tātad problēmām nevajadzētu būt :)

Link to comment
Share on other sites

×
×
  • Create New...