Перейти к содержанию

Рекомендуемые сообщения

CREATE TABLE IF NOT EXISTS `oc_product` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `model` varchar(64) NOT NULL,
  `sku` varchar(64) NOT NULL,
  `upc` varchar(12) NOT NULL,
  `ean` varchar(14) NOT NULL,
  `jan` varchar(13) NOT NULL,
  `isbn` varchar(13) NOT NULL,
  `mpn` varchar(64) NOT NULL,
  `location` varchar(128) NOT NULL,
  `quantity` int(4) NOT NULL DEFAULT '0',
  `stock_status_id` int(11) NOT NULL,
  `image` varchar(255) DEFAULT NULL,
  `manufacturer_id` int(11) NOT NULL,
  `shipping` tinyint(1) NOT NULL DEFAULT '1',
  `price` decimal(15,4) NOT NULL DEFAULT '0.0000',
  `points` int(8) NOT NULL DEFAULT '0',
  `tax_class_id` int(11) NOT NULL,
  `date_available` date NOT NULL,
  `weight` decimal(15,8) NOT NULL DEFAULT '0.00000000',
  `weight_class_id` int(11) NOT NULL DEFAULT '0',
  `length` decimal(15,8) NOT NULL DEFAULT '0.00000000',
  `width` decimal(15,8) NOT NULL DEFAULT '0.00000000',
  `height` decimal(15,8) NOT NULL DEFAULT '0.00000000',
  `length_class_id` int(11) NOT NULL DEFAULT '0',
  `subtract` tinyint(1) NOT NULL DEFAULT '1',
  `minimum` int(11) NOT NULL DEFAULT '1',
  `sort_order` int(11) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL DEFAULT '0',
  `date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `viewed` int(5) NOT NULL DEFAULT '0',
  `asticker_id` int(11) NOT NULL DEFAULT '0',
  `asticker_date_start` date NOT NULL DEFAULT '0000-00-00',
  `asticker_date_end` date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (`product_id`),
  UNIQUE KEY `product_id` (`product_id`),
  UNIQUE KEY `product_id_2` (`product_id`),
  KEY `model` (`model`),
  KEY `stock_status_id` (`stock_status_id`),
  KEY `manufacturer_id` (`manufacturer_id`),
  KEY `tax_class_id` (`tax_class_id`),
  KEY `weight_class_id` (`weight_class_id`),
  KEY `length_class_id` (`length_class_id`),
  KEY `asticker_id` (`asticker_id`),
  KEY `model_2` (`model`),
  KEY `sku` (`sku`),
  KEY `upc` (`upc`),
  KEY `manufacturer_id_2` (`manufacturer_id`),
  KEY `sort_order` (`sort_order`),
  KEY `status` (`status`),
  KEY `date_available` (`date_available`),
  KEY `model_3` (`model`),
  KEY `sku_2` (`sku`),
  KEY `upc_2` (`upc`),
  KEY `manufacturer_id_3` (`manufacturer_id`),
  KEY `sort_order_2` (`sort_order`),
  KEY `status_2` (`status`),
  KEY `date_available_2` (`date_available`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=538 ;

Пользуйтесь советами псевдооптимизаторов добавляйте индексы, и конвертируйте в InnoDb

 

CREATE TABLE IF NOT EXISTS `oc_order` (
  `order_id` int(11) NOT NULL AUTO_INCREMENT,
  `invoice_no` int(11) NOT NULL DEFAULT '0',
  `invoice_prefix` varchar(26) NOT NULL,
  `store_id` int(11) NOT NULL DEFAULT '0',
  `store_name` varchar(64) NOT NULL,
  `store_url` varchar(255) NOT NULL,
  `customer_id` int(11) NOT NULL DEFAULT '0',
  `customer_group_id` int(11) NOT NULL DEFAULT '0',
  `firstname` varchar(32) NOT NULL,
  `lastname` varchar(32) NOT NULL,
  `email` varchar(96) NOT NULL,
  `telephone` varchar(32) NOT NULL,
  `fax` varchar(32) NOT NULL,
  `payment_firstname` varchar(32) NOT NULL,
  `payment_lastname` varchar(32) NOT NULL,
  `payment_company` varchar(32) NOT NULL,
  `payment_company_id` varchar(32) NOT NULL,
  `payment_tax_id` varchar(32) NOT NULL,
  `payment_address_1` varchar(128) NOT NULL,
  `payment_address_2` varchar(128) NOT NULL,
  `payment_city` varchar(128) NOT NULL,
  `payment_postcode` varchar(10) NOT NULL,
  `payment_country` varchar(128) NOT NULL,
  `payment_country_id` int(11) NOT NULL,
  `payment_zone` varchar(128) NOT NULL,
  `payment_zone_id` int(11) NOT NULL,
  `payment_address_format` text NOT NULL,
  `payment_method` varchar(128) NOT NULL,
  `payment_code` varchar(128) NOT NULL,
  `shipping_firstname` varchar(32) NOT NULL,
  `shipping_lastname` varchar(32) NOT NULL,
  `shipping_company` varchar(32) NOT NULL,
  `shipping_address_1` varchar(128) NOT NULL,
  `shipping_address_2` varchar(128) NOT NULL,
  `shipping_city` varchar(128) NOT NULL,
  `shipping_postcode` varchar(10) NOT NULL,
  `shipping_country` varchar(128) NOT NULL,
  `shipping_country_id` int(11) NOT NULL,
  `shipping_zone` varchar(128) NOT NULL,
  `shipping_zone_id` int(11) NOT NULL,
  `shipping_address_format` text NOT NULL,
  `shipping_method` varchar(128) NOT NULL,
  `shipping_code` varchar(128) NOT NULL,
  `comment` text NOT NULL,
  `total` decimal(15,4) NOT NULL DEFAULT '0.0000',
  `order_status_id` int(11) NOT NULL DEFAULT '0',
  `affiliate_id` int(11) NOT NULL,
  `commission` decimal(15,4) NOT NULL,
  `language_id` int(11) NOT NULL,
  `currency_id` int(11) NOT NULL,
  `currency_code` varchar(3) NOT NULL,
  `currency_value` decimal(15,8) NOT NULL DEFAULT '1.00000000',
  `ip` varchar(40) NOT NULL,
  `forwarded_ip` varchar(40) NOT NULL,
  `user_agent` varchar(255) NOT NULL,
  `accept_language` varchar(255) NOT NULL,
  `date_added` datetime NOT NULL,
  `date_modified` datetime NOT NULL,
  PRIMARY KEY (`order_id`),
  KEY `order_status_id` (`order_status_id`),
  KEY `customer_id` (`customer_id`),
  KEY `store_id` (`store_id`),
  KEY `customer_group_id` (`customer_group_id`),
  KEY `payment_company_id` (`payment_company_id`),
  KEY `payment_tax_id` (`payment_tax_id`),
  KEY `payment_country_id` (`payment_country_id`),
  KEY `payment_zone_id` (`payment_zone_id`),
  KEY `shipping_country_id` (`shipping_country_id`),
  KEY `shipping_zone_id` (`shipping_zone_id`),
  KEY `affiliate_id` (`affiliate_id`),
  KEY `language_id` (`language_id`),
  KEY `currency_id` (`currency_id`),
  KEY `customer_id_2` (`customer_id`),
  KEY `customer_id_3` (`customer_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=68 ;

магазин грузится 17 сек!!!

CREATE TABLE IF NOT EXISTS `oc_category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT,
  `image` varchar(255) DEFAULT NULL,
  `parent_id` int(11) NOT NULL DEFAULT '0',
  `top` tinyint(1) NOT NULL,
  `column` int(3) NOT NULL,
  `sort_order` int(3) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL,
  `date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`category_id`),
  KEY `parent_id` (`parent_id`),
  KEY `parent_id_2` (`parent_id`),
  KEY `top` (`top`),
  KEY `sort_order` (`sort_order`),
  KEY `status` (`status`),
  KEY `parent_id_3` (`parent_id`),
  KEY `top_2` (`top`),
  KEY `sort_order_2` (`sort_order`),
  KEY `status_2` (`status`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется не ключи нужно, а запросы в моделях смотреть, чтобы выборку не делало сразу по всем столбцам, если этого не нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@buslikdrev я промолчу.. Хорошо? А то рука очень медленно потянулась влепить минус.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 минут назад, chukcha сказал:

@buslikdrev я промолчу.. Хорошо? А то рука очень медленно потянулась влепить минус.

Не молчите, я учусь и готов усвоить любые советы и уроки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@chukcha а в чем возмущение то? у innodb немного другое назначение, и без надобности использовать смысла нет. С другой стороны в архитектуре магазина эта надобность всегда есть :-) а для быстрых селектов строятся flat таблицы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какая надобность при указанных  данных

А на количество индексов смотрели..
Дело не в том что они дублируются, дело в том что оно есть без надобности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в каком месте дублированные индексы на 500 товарах дают 17 секунд?

А также с чего это вдруг innodb без mariadb 10?
А fulltext куда деть ?/

По моему вы тут слепили немного горбатого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, magecode сказал:

С другой стороны в архитектуре магазина эта надобность всегда есть

Назовите мне надобность на более менее статическую (чтение) таблицу oc_product

для oc_cart которая является наиболее востребуемой динамически, и куда происходит часто запись/чтение я ничего не сказал.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, snastik сказал:

в каком месте дублированные индексы на 500 товарах дают 17 секунд?

А также с чего это вдруг innodb без mariadb 10?
А fulltext куда деть ?/

По моему вы тут слепили немного горбатого.

Это не я!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 hour ago, chukcha said:

А на количество индексов смотрели..

 

Об индексах я ничего не говорил, там и так понятно что фантастика :-)

 

55 minutes ago, chukcha said:

Назовите мне надобность на более менее статическую (чтение) таблицу oc_product

 

не об этом речь, конкретно для одной таблицы толку никакого, а в oc_cart наверное предполагалось использовать для связки ключей (которой нет:))

 

55 minutes ago, snastik said:

А fulltext куда деть ?

 

да никуда, для fulltext'a просто оставляют таблицы в myisam.

 

@chukcha а что это за псевдооптимизаторы, на которые вы так возмущены? :-)

Изменено пользователем magecode

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне сбросили дамп.. мол посмотри.
Посмотрел. Отсюда и пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

думаю кеш в таких случаях все решает :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
CREATE TABLE IF NOT EXISTS `oc_product_description` (
  `product_id` int(11) NOT NULL,
  `language_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `meta_description` varchar(255) NOT NULL,
  `meta_keyword` varchar(255) NOT NULL,
  `seo_title` varchar(255) NOT NULL,
  `seo_h1` varchar(255) NOT NULL,
  `tag` text NOT NULL,
  `custom_title` varchar(255) DEFAULT '',
  PRIMARY KEY (`product_id`,`language_id`),
  KEY `name` (`name`),
  KEY `language_id` (`language_id`),
  FULLTEXT KEY `ft_namerel` (`name`,`description`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

10 минут назад, magecode сказал:

да никуда, для fulltext'a просто оставляют таблицы в myisam.

Да?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, chukcha сказал:

конвертируйте в InnoDb

С каких пор это стало способом оптимизации?

 

3 часа назад, chukcha сказал:

рука очень медленно потянулась влепить минус.

Тянуться придётся долго, они всё ещё не работают :)

 

1 час назад, magecode сказал:

для fulltext'a просто оставляют таблицы в myisam

InnoDB поддерживает полнотекстовые индексы где-то с одной из первых версий в ветке MySQL 5.6.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
36 minutes ago, Dotrox said:

InnoDB поддерживает полнотекстовые индексы где-то с одной из первых версий в ветке MySQL 5.6.

 

да, но воспользоваться им мне так и не удалось. Хватило опыта в myisam.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Dotrox сказал:

С каких пор это стало способом оптимизации?

 

Есть мнение (здесь на форуме, например, высказывали), что InnoDb не хуже и не лучше MyIsam применительно к опенкарт в плане производительности.

Если есть обратные выводы, то интересно было бы взглянуть на данные статистики в сравнении.

 

Из косвенных недостатков. Это, конечно, не недостаток движка/типа таблицы. Некоторые дамперы создают дамп БД с таблицами InnoDb так, что не в состоянии потом воссоздать таблицы из этого дампа.

Вот та же самая БД с MyIsam без проблем дампится и восстанавливается, а с InnoDb  вылетают ошибки.

Так, например, себя ведет Sypex Dumper с дефолтными настройками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Бездумно вставляя индексы можно запросто наступить на грабли тормозов
Индексы должны быть продуманы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

мне кажется, что для опенкарта в innoDB нету никакого смысла. 
innoDB быстрее для записи, MyISAM - для чтения.
innoDB в отличии от MyISAM при записи блокирует не всю таблицу, а только ту ее строку с которой работает, поэтому если нужно много писать в какую-то таблицу, то для нее лучше использовать innoDB она будет работать быстрее, но в магазине в основном происходит именно чтение, так как новый товар создали один раз и читают тысячи раз, а для чтения быстрее MyISAM, так как она проще. 
Поэтому я очень сомневаюсь, что для опенкарта innoDB будет быстрее.
innoDB поддерживает транзакции, поэтому считается более надежной и используется на серьезных проектах, но опенкарт все равно транзакции не использует,
innoDB поддерживает внешние ключи, которые в опенкарт тоже не используются
innoDB лучше восстанавливается после сбоя - это наверное единственная причина, по которой стоило бы использовать этот движок, например для таблиц с данными о покупках, платежных операциях итд. Для всего остального есть бэкапы которые решают эту проблему, в том же Sypex Dumper упомянутом выше есть возможность делать бэкапы по крону, хоть через каждую минуту. 

поэтому и смысла использовать innoDB в опенкарт я не вижу. Скорости он не добавит, а преимущества этого движка опенкарт все равно особо не почувствует. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.