Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQL: Open Source Database

MySQL: Open Source Database

know more about MySQL open source database

Avatar for Mahesh Salaria

Mahesh Salaria

February 25, 2013

More Decks by Mahesh Salaria

Other Decks in Technology

Transcript

  1. —  Storage  engines   —  Schema   —  Normalization  

    —  Data  types   —  Indexes   —  Know  more  about  your  SQL  queries  -­‐  Using  EXPLAIN     —  Character  set  and  Collation   —  Resources   2   Salaria  Software  Services  
  2. —  Generics  are  inefficient   •  If  you  have  chosen

     MySQL,  take  advantage  of  its   strengths   •  Having  an  understanding  of  the  database  helps  you   develop  better-­‐performing  applications   ü better  to  design  a  well-­‐performing  database-­‐driven   application  from  the  start   ü than  try  to  fix  a  slow  one  after  the  fact!   3   Salaria  Software  Services  
  3. Salaria  Software  Services   4   —  MySQL  supports  several

      storage  engines  that  act   as  handlers  for  different   table  types   ü No  other  database   vendor  offers  this   capability  
  4. —  Dynamically  add  and  remove  storage  engines.   —  Change

     the  storage  engine  on  a  table  with                “ALTER  TABLE  <table>  ENGINE=InnoDB;”   5   Salaria  Software  Services  
  5. —  Concurrency:  some  have  more  granular  locks  than   others

      ü right  locking  can  improve  performance.   •  Storage:  how  the  data  is  stored  on  disk   ü page  size  for  tables,  indexes,  format  used   •  Indexes:  b-­‐trees,  hash   •  Memory  usage   ü caching  strategy   •  Transactions:   ü not  every  application  table  needs  transactions   6   Salaria  Software  Services  
  6. “As  a  developer,  what  do  I  need  to  know  

    about  storage  engines,  without  being  a   MySQL  expert?”   •  Keep  in  mind  the  following  questions:   ü What  type  of  data  will  you  be  storing?   ü Is  the  data  constantly  changing?   ü Is  the  data  mostly  logs  (INSERTs)?   ü requirements  for  reports?   ü need  for  transaction  control?   7   Salaria  Software  Services  
  7. —  Default  MySQL  engine   •  high-­‐speed  Query  and  Insert

     capability   ü insert  uses  shared  read  lock   ü updates,  deletes  use  table-­‐level  locking,  slower   •  full-­‐text  indexing   ü Good  for  text  search   •  Non-­‐transactional,  No  foreign  key  support   •  good  choice  for  :   ü read-­‐only  or  read-­‐mostly  application  tables  that  don't   require  transactions   ü Web,  data  warehousing,  logging,  auditing   8   Salaria  Software  Services  
  8. —  Transaction-­‐safe  and  ACID  (atomicity,  consistency,   isolation,  durability)  compliant

      ü  crash  recovery,  foreign  key  constraints   •  good  query  performance,  depending  on  indexes   •  row-­‐level  locking,  Multi  Version  Concurrency  Control   (MVCC)   ü  allows  fewer  row  locks  by  keeping  data  snapshots   –  Depending  on  the  isolation  level,  no  locking  for  SELECT   –  high  concurrency  possible   •  uses  more  disk  space  and  memory  than  ISAM   •  Good  for  Online  transaction  processing  (OLTP)   ü  Lots  of  users:  eBay,  Google,  Yahoo!,  Facebook,  etc.   9   Salaria  Software  Services  
  9. —  Entirely  in-­‐memory  engine   ü stores  all  data  in  RAM

     for  extremely  fast  access   ü Updated  Data  is  not  persisted   –    table  loaded  on  restart     •  Hash  index  used  by  default   •  Good  for   ü Summary  and  transient  data   ü "lookup"  tables,   ü calculated  table  counts,   ü for  caching,  temporary  tables   10   Salaria  Software  Services  
  10. —  Incredible  insert  speeds   •  Great  compression  rates  (zlib)?

      ü Typically  6-­‐8x  smaller  than  MyISAM   •  No  UPDATEs   •  Ideal  for  storing  and  retrieving  large  amounts  of   historical  data   ü audit  data,  log  files,Web  traffic  records   ü Data  that  can  never  be  updated   11   Salaria  Software  Services  
  11. Salaria  Software  Services   12   —  You  can  use

     multiple   storage  engines  in  a   single  application   ü  A  storage  engine  for  the   same  table  on  a  slave  can   be  different  than  that  of   the  master   •  Choose  storage  engine   that's  best  for  your   applications  requirements   ü  can  greatly  improve   performance  
  12. —  Creating  a  table  with  a  specified  engine   ü CREATE

     TABLE  t1  (...)          ENGINE=InnoDB;   •  Changing  existing  tables   ü ALTER  TABLE  t1  ENGINE=MyISAM;   •  Finding  all  your  available  engines   ü SHOW  STORAGE  ENGINES;   13   Salaria  Software  Services  
  13. Basic  foundation  of  performance   •  Normalization   •  Data

     Types   ü Smaller,  smaller,  smaller   -­‐  Smaller  tables  use  less  disk,  less  memory,  can  give  better   performance   •  Indexing   ü Speeds  up  retrieval   14   Salaria  Software  Services  
  14. —  Eliminate  redundant  data:   ü   Don't  store  the  same

     data  in  more  than  one  table   ü   Only  store  related  data  in  a  table     ü   reduces  database  size  and  errors   15   Salaria  Software  Services  
  15. —  updates  are  usually  faster.   ü there's  less  data  to

     change.   •  tables  are  usually  smaller,  use  less  memory,  which   can  give  better  performance.   •  better  performance  for  distinct  or  group  by  queries   16   Salaria  Software  Services  
  16. —  However  Normalized  database  causes  joins  for   queries  

    •    excessively  normalized  database:   ü queries  take  more  time  to  complete,  as  data  has  to  be   retrieved  from  more  tables.   •  Normalized  better  for  writes  OLTP   •  De-­‐normalized  better  for  reads  ,  reporting   •  Real  World  Mixture:   ü normalized  schema   ü Cache  selected  columns  in  memory  table   17   Salaria  Software  Services  
  17. Smaller  =>  less  disk  =>  less  memory  =>  better  

    performance   —  Use  the  smallest  data  type  possible   •  The  smaller  your  data  types,  The  more  index  (and   data)  can  fit  into  a  block  of  memory,  the  faster  your     queries  will  be.   ü Period.   ü Especially  for  indexed  fields   18   Salaria  Software  Services  
  18. —  MySQL  has  9  numeric  data  types   ü  Compared

     to  Oracle's  1   •    Integer:   ü  TINYINT  ,  SMALLINT,  MEDIUMINT,  INT,  BIGINT   ü  Require  8,  16,  24,  32,  and  64  bits  of  space.   •  Use  UNSIGNED  when  you  don't  need  negative  numbers  –  one  more  level  of   data  integrity   •  BIGINT  is  not  needed  for  AUTO_INCREMENT   ü  INT  UNSIGNED  stores  4.3  billion  values!   ü  Summation  of  values...  yes,  use  BIGINT   —  Floating  Point:  FLOAT,  DOUBLE   ü  Approximate  calculations   •  Fixed  Point:  DECIMAL   ü  Always  use  DECIMAL  for  monetary/currency  fields,  never  use  FLOAT  or   DOUBLE!   •  Other:  BIT     ü  Store  0,1  values   19   Salaria  Software  Services  
  19. —  VARCHAR(n)  variable  length   ü uses  only  space  it  needs

      –  Can  save  disk  space  =  better  performance   ü   Use  :   –  Max  column  length  >  avg   –  when  updates  rare  (updates  fragment)   •  CHAR(n)  fixed  length   ü Use:   –  short  strings,  Mostly  same  length,  or  changed  frequently   20   Salaria  Software  Services  
  20. —  Always  define  columns  as  NOT  NULL   –  unless

     there  is  a  good  reason  not  to   ü Can  save  a  byte  per  column   ü nullable  columns  make  indexes,  index  statistics,  and   value  comparisons  more  complicated.   •  Use  the  same  data  types  for  columns  that  will  be   compared  in  JOINs   ü Otherwise  converted  for  comparison   •  Use  BLOBs  very  sparingly   ü Use  the  filesystem  for  what  it  was  intended   21   Salaria  Software  Services  
  21. “The  more  records  you  can  fit  into  a  single  page

     of   memory/disk,  the  faster  your  seeks  and  scans  will  be.”   •  Use  appropriate  data  types   •  Keep  primary  keys  small   •  Use  TEXT  sparingly   ü Consider  separate  tables   •  Use  BLOBs  very  sparingly   ü Use  the  filesystem  for  what  it  was  intended   22   Salaria  Software  Services  
  22. —  Indexes  Speed  up  Queries,   ü SELECT...WHERE  name  =  'carol'

      ü only  if  there  is  good  selectivity:   –  %  of  distinct  values  in  a  column   •  But...  each  index  will  slow  down  INSERT,  UPDATE,   and  DELETE  operations   23   Salaria  Software  Services  
  23. —  Always  have  an  index  on  join  conditions   •

     Look  to  add  indexes  on  columns  used  in  WHERE  and   GROUP  BY  expressions   •  PRIMARY  KEY,  UNIQUE  ,  and  Foreign  key  Constraint   columns  are  automatically  indexed.   ü other  columns  can  be  indexed  (CREATE  INDEX..)   24   Salaria  Software  Services  
  24. —  use  the  MySQL  slow  query  log  and  use  Explain

      •  Append  EXPLAIN  to  your  SELECT  statement   ü shows  how  the  MySQL  optimizer  has  chosen  to  execute   the  query   •  You  Want  to  make  your  queries  access  less  data:   ü are  queries  accessing  too  many  rows  or  columns?   –  select  only  the  columns  that  you  need   •  Use  to  see  where  you  should  add  indexes   ü Consider  adding  an  index  for  slow  queries  or  cause  a  lot   of  load.   –  ensures  that  missing  indexes  are  picked  up  early  in  the   development  process   25   Salaria  Software  Services  
  25. —  Find  and  fix  problem  SQL:   •  how  long

     a  query  took   •  how  the  optimizer  handled  it   ü Drill  downs,  results  of  EXPLAIN  statements   •  Historical  and  real-­‐time  analysis   ü query  execution  counts,  run  time      “Its  not  just  slow  running  queries  that  are  a  problem,   Sometimes  its  SQL  that  executes  a  lot  that  kills  your   system”   26   Salaria  Software  Services  
  26. Salaria  Software  Services   27   —  Just  append  EXPLAIN

     to   your  SELECT  statement   •  Provides  the  execution  plan   chosen  by  the  MySQL   optimizer  for  a  specific   SELECT  statement   ü  Shows  how  the  MySQL   optimizer  executes  the   query   •  Use  to  see  where  you   should  add  indexes   ü  ensures  that  missing   indexes  are  picked  up   early  in  the  development   process  
  27. —  A  character  set  is  a  set  of  symbols  and

     encodings.     —  A  collation  is  a  set  of  rules  for  comparing  characters  in  a   character  set.     —  MySQL  can  do  these  things  for  you:     ü  Store  strings  using  a  variety  of  character  sets     ü  Compare  strings  using  a  variety  of  collations     ü  Mix  strings  with  different  character  sets  or  collations  in  the   same  server,  the  same  database,  or  even  the  same  table     ü  Allow  specification  of  character  set  and  collation  at  any  level      -­‐  Mysql  >  SET  NAMES  'utf8';      -­‐  Mysql  >  SHOW  CHARACTER  SET   28   Salaria  Software  Services  
  28. —  Two  different  character  sets  cannot  have  the  same  

    collation.     —  Each  character  set  has  one  collation  that  is  the  default   collation.  For  example,  the  default  collation  for  latin1  is   latin1_swedish_ci.  The  output  for  “SHOW  CHARACTER   SET”  indicates  which  collation  is  the  default  for  each   displayed  character  set.     —  There  is  a  convention  for  collation  names:  They  start  with   the  name  of  the  character  set  with  which  they  are   associated,  they  usually  include  a  language  name,  and  they   end  with  _ci  (case  insensitive),  _cs  (case  sensitive),  or  _bin   (binary).     29   Salaria  Software  Services  
  29. —  <meta  http-­‐equiv="Content-­‐Type"  content="text/html;   charset=utf-­‐8"  />   —  <?php

     mysql_query('SET  NAMES  utf8');  ?>   —  CREATE  DATABASE  mydatabase  DEFAULT  CHARACTER   SET  utf8  COLLATE  utf8_general_ci;   —  CREATE  TABLE  mytable  (      mydata  VARCHAR(128)  NOT  NULL   )  ENGINE=MyISAM  DEFAULT  CHARACTER  SET  utf8   COLLATE  utf8_general_ci;   30   Salaria  Software  Services  
  30. —  MySQL  Forge  and  the  Forge  Wiki   http://forge.mysql.com/  

    —  Planet  MySQL    http://planetmysql.org/   —  MySQL  DevZone   http://dev.mysql.com/   —  High  Performance  MySQL  book   31   Salaria  Software  Services  
  31. Salaria  Software  Services   33   Mahesh  Salaria   [email protected]

      Salaria  Software  Services   http://salariasoft.com