Lynx Posted April 21, 2008 Report Share Posted April 21, 2008 Š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 More sharing options...
bubu Posted April 21, 2008 Report Share Posted April 21, 2008 Vai rakstot WHERE lauks = 'tips1' mysql pats nesapratīs, ka 'tips1' ir viena no enum'a vērībām un attiecīgi meklēšanu veiktu pēc iekšējās vērtības? Link to comment Share on other sites More sharing options...
Lynx Posted April 21, 2008 Author Report Share Posted April 21, 2008 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 More sharing options...
Analgiins Posted April 21, 2008 Report Share Posted April 21, 2008 enum neesmu nekad izmantojis, šādiem gadījumiem parasti lietoju tinyint(1). Link to comment Share on other sites More sharing options...
Lynx Posted April 22, 2008 Author Report Share Posted April 22, 2008 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 More sharing options...
bubu Posted April 22, 2008 Report Share Posted April 22, 2008 Īsti gan nesaprotu, kāpēc lai būtu jāraksta strings '1' vai '2' nevis vērtība 1 vai 2... Link to comment Share on other sites More sharing options...
marrtins Posted April 23, 2008 Report Share Posted April 23, 2008 Kā arī tinyint(1) mysql uztver kā bool, kas varētu radīt problēmas. Otrādi. Un kādas tās problēmas būtu? Link to comment Share on other sites More sharing options...
Lynx Posted April 23, 2008 Author Report Share Posted April 23, 2008 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 More sharing options...
bubu Posted April 23, 2008 Report Share Posted April 23, 2008 Ah tu tos '1', '2' lieto kā enuma vērtības. Tad es es tevi iepriekš nepareizi sapratu. Jautājums atceļas. Link to comment Share on other sites More sharing options...
Recommended Posts