MySQL таблица MyISAM

Discussion in 'PHP' started by Orelx, 28 Jun 2013.

  1. Orelx

    Orelx New Member

    Joined:
    14 Aug 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Есть таблица

    Code:
    CREATE TABLE IF NOT EXISTS `clicks` ( 
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
      `id_campaign` int(10) unsigned NOT NULL, 
      `id_ground` int(10) unsigned NOT NULL, 
      `type` varchar(5) NOT NULL DEFAULT 'click', 
      `hash` varchar(32) NOT NULL, 
      `ip` int(11) NOT NULL, 
      `devices` varchar(100) NOT NULL, 
      `os` varchar(30) NOT NULL, 
      `operator` varchar(100) NOT NULL, 
      `country` varchar(100) NOT NULL, 
      `user_agent` varchar(150) NOT NULL, 
      `status` varchar(3) NOT NULL DEFAULT 'yes', 
      `comment_status` varchar(50) DEFAULT NULL, 
      `sum` float NOT NULL, 
      `d` int(4) NOT NULL, 
      `time` int(11) NOT NULL, 
      PRIMARY KEY (`id`), 
      KEY `id_campaign` (`id_campaign`), 
      KEY `id_ground` (`id_ground`), 
      KEY `status` (`status`), 
      KEY `d` (`d`), 
      KEY `time` (`time`) 
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ; 

    В ней будет очень много записей. 80% запросов накладываются на

    Code:
    `id` 
    `id_campaign` - id 
    `id_ground` - id 
    `hash`- md5 hash 
    `d` - date("dm") 
    `time` - unix time 

    Группировка по

    Code:
    `id` 
    `id_campaign` 
    `id_ground` 
    `d` 
    Сортировка
    Code:
    `time` 
    `d` 
    Основная задача быстрый SELECT (Операции SUM(),COUNT()) и INSERT

    Так как таблица MyISAM блокировка идет на уровне всей таблицы, а значит возможно подвисание процессов select во время insert

    Стоит ли сменить движок на innoDB и использовать транзакции?
     
  2. shude

    shude New Member

    Joined:
    15 May 2010
    Messages:
    12
    Likes Received:
    3
    Reputations:
    5
    Индексы построены над таблицей не правильно. Следует добавить составной индекс по полям группировки (при условии их высокой селективности).

    Таблица MyISAM при синхронных запросах на вставку и выборку будет работать очень медленно. Если же вставки происходят запланированно и составляют скажем 10%-15% операций, то можно использовать myisam предварительно оптимизировав индексы.

    Чтобы отследить правильно ли настроены индексы в таблице можно использовать: EXPLAIN , по возможности использовать покрывающие индексы, в этом случае запросы будут почти мгновенными.

    Не совсем понятно из описания какие запросы будут иметь место чаще всего, поэтому ответил в общих чертах.
     
  3. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    673
    Likes Received:
    125
    Reputations:
    4
    может я чего то не понимаю но при чем транзацкии к select ? и зачем изначально myisam если default это innodb
    и вообще http://itif.ru/otlichiya-myisam-innodb/.
    http://forum.vingrad.ru/forum/topic-287510/kw-myisam-innodb-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D0%B1%D0%B7%D0%BE%D1%80.html
     
Loading...