title: MySQL query performance dilemma: enum vs tables
body: <p>I currently have this schema:</p>
  
  <pre><code>CREATE TABLE `users` (
    `users_id` int(11) NOT NULL AUTO_INCREMENT,
    `users_name` varchar(50),
    `users_lastname` varchar(50),
    `users_dob` date,
    `users_type` int(11) NOT NULL default 0,
    `users_access` int(11) NOT NULL default 0,
    `users_level` int(11) NOT NULL default 0,
    /* etc...*/
    PRIMARY KEY (`users_id`)
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  
  CREATE TABLE `users_types` (
    `types_id` int(11) NOT NULL AUTO_INCREMENT,
    `types_name` varchar(50),
    PRIMARY KEY (`types_id`)
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  
  /* etc..*/
  </code></pre>
  
  <p>Query:</p>
  
  <pre><code>SELECT
      types_name AS user_type, 
      /* all other fields*/
      users.*
      FROM users
      INNER JOIN users_types ON (users.users_type=types_id);
      /* INNER JOIN for all other tables*/
  /* Rest of query */
  </code></pre>
  
  <p><strong>My new solution:</strong></p>
  
  <pre><code>CREATE TABLE `users` (
    `users_id` int(11) NOT NULL AUTO_INCREMENT,
    `users_name` varchar(50),
    `users_lastname` varchar(50),
    `users_dob` date,
    `users_type` ENUM('type1', 'type2', 'type3'),
    `users_access` ENUM('access1', 'access2', 'access3'),
    `users_level` ENUM('level1', 'level2', 'level3'),
    /* etc...*/
    PRIMARY KEY (`users_id`)
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  </code></pre>
  
  <p>Query:</p>
  
  <pre><code>SELECT
      *
      FROM users
  </code></pre>
  
  <p>From what I see is using ENUM is very simple and can be very fast to execute.</p>
  
  <ol>
  <li>Am I right? Would it be faster for the MySQL Engine to process an ENUM type field rather than having LEFT JOINs?</li>
  <li>Is using ENUM a good practice?</li>
  </ol>
  
  <p>Thanks</p>