MySQL: ОБНОВЛЕНИЕ слишком медленное - PullRequest
1 голос
/ 19 февраля 2011

Ниже приведен тест из серии запросов, которые мне нужно выполнить.Как вы можете видеть, ОБНОВЛЕНИЯ значительно медленнее, чем другие запросы. Что я могу сделать, чтобы ускорить их?

0.0002  LOCK TABLE category WRITE; 
0.0004  
        SELECT
            @myLeft := left_id
        FROM
            category
        WHERE
            `amazon_browse_node_id` = 2675;

0.0184  UPDATE category SET right_id = right_id + 2 WHERE right_id > @myLeft; 
0.0161  UPDATE category SET left_id = left_id + 2 WHERE left_id > @myLeft; 
0.0007  INSERT INTO category(`name`, `amazon_browse_node_id`, `category_seo_friendly_url`, `left_id`, `right_id`) VALUES('Training', 2697, 'training-2697/', @myLeft + 1, @myLeft + 2); 
0.0004  UNLOCK TABLES;

Эта проблема связана со следующими проблемами (и моей попыткой решения), которые я также разместил здесь в SO:

  1. MySQL: вложенный набор медленный?
  2. Триггер MySQL для кэширования результатов?

ОБНОВЛЕНИЕ:

CREATE TABLE IF NOT EXISTS `category`
  (
     `category_id`               INT(11) NOT NULL AUTO_INCREMENT,
     `name`                      CHAR(255) DEFAULT NULL,
     `category_seo_friendly_url` CHAR(255) DEFAULT NULL,
     `left_id`                   INT(11) DEFAULT '1',
     `right_id`                  INT(11) DEFAULT '2',
     PRIMARY KEY (`category_id`),
     UNIQUE KEY `seo_friendly_url_UNIQUE` (`category_seo_friendly_url`),
     KEY `category_id` (`category_id`),
     KEY `left_id` (`left_id`),
     KEY `right_id` (`right_id`)
  )

Ответы [ 2 ]

5 голосов
/ 19 февраля 2011

Возможно, у вас есть индекс в таблице, который

  1. Ускоряет SELECT-запросы
  2. Замедляет выполнение запросов UPDATE, так как индекс должен быть обновлен

Операторы INSERT добавляют только одну запись, что означает, что выполняется быстрее, чем обновление N записей.

0 голосов
/ 19 февраля 2011

Единственное, что может помочь - это правильные ключи для right_id и left_id.Даже в этом случае обновления выполняются медленнее, чем выборка или вставка.Вы ничего не можете с этим поделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...