Lynx Posted April 21, 2008 Report 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?
bubu Posted April 21, 2008 Report 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?
Lynx Posted April 21, 2008 Author Report 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ē? :)
Analgiins Posted April 21, 2008 Report Posted April 21, 2008 enum neesmu nekad izmantojis, šādiem gadījumiem parasti lietoju tinyint(1).
Lynx Posted April 22, 2008 Author Report 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
bubu Posted April 22, 2008 Report 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...
marrtins Posted April 23, 2008 Report 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?
Lynx Posted April 23, 2008 Author Report 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 :)
bubu Posted April 23, 2008 Report 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.
Recommended Posts