Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > как оптимизировать базу


Автор: dark_religion 9.6.2009, 20:51
Что я могу сделать, что бы ускорить работу?

1. например мне надо выбрать 20 тысяч товаров из базы 
структура:
товары 50 тысяч
характеристики товаров 1 миллион. у каждой характеристики есть айди товара
у каждой характеристики есть имя, но так как они часто повторяются то они хранятся в отдельной таблице и у каждой характеристики есть айди ее имени. 

есть корзина в которой храняться айди купленных товаров. теперь быстро надо выбрать всю информацию о товарах например для 20 тысяч.

при попытке дампа базы все зависает. Как можно это чудо оптимизировать?


Автор: Akina 9.6.2009, 21:11
Вот нафига, хочется узнать, может потребоваться детальная информация о 20 тыс. товаров?
А так вроде всё нормально - 3 таблицы, организуется много-ко-много... если правильно построены индексы, должно летать. А если и тормозить - то только на стадии передачи данных на клиента.
Зависает? смотри explain... 

Автор: dark_religion 10.6.2009, 08:51
Если через phpMyAdmin делать дамп то зависает. Как эксплейн смотреть? 

Тип базы инно диби. Оно нормально работает если информацию об эдном продукте надо.  А если надо о всех то подвисает.

Для 20 тысяч может быть надо, для частичного автоматического экспорта. 

Цитата

если правильно построены индексы, должно летать


какие именно индексы?

инно диби фултекст не поддерживает то я в принципе по тексту и не ищу а только по айди.

Автор: Akina 10.6.2009, 09:08
Дай структуры, посмотрим.

Автор: Бонифаций 10.6.2009, 09:23
хорошая корзинка такая - на 20 тыщ товаров. А говорят - кризис

Добавлено через 2 минуты и 42 секунды
настройки innodb покажи также.

Скажем вывод

show variables like 'innodb%';



Автор: dark_religion 10.6.2009, 15:49
Код

CREATE TABLE IF NOT EXISTS `details` (
  `detail_id` int(11) NOT NULL auto_increment,
  `detail_name` varchar(150) character set cp1251 NOT NULL,
  `specification_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  PRIMARY KEY  (`detail_name`,`specification_id`,`product_id`),
  KEY `detail_id` (`detail_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Table structure for table `products`
--

CREATE TABLE IF NOT EXISTS `products` (
  `product_id` int(11) NOT NULL auto_increment,
  `product_name` varchar(150) character set cp1251 NOT NULL,
  `product_desc` text character set cp1251 NOT NULL,
  `product_simg` varchar(35) character set cp1251 NOT NULL,
  `category_id` int(11) default NULL,
  PRIMARY KEY  (`product_id`),
  UNIQUE KEY `product_link` (`product_link`),
  UNIQUE KEY `product_name` (`product_name`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Table structure for table `specifications`
--

CREATE TABLE IF NOT EXISTS `specifications` (
  `specification_id` int(11) NOT NULL auto_increment,
  `specification_name` varchar(150) character set cp1251 NOT NULL,
  `parent_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`specification_name`,`parent_id`),
  KEY `specification_id` (`specification_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

=============================
Цитата

innodb_additional_mem_pool_size    2097152
innodb_autoextend_increment    8
innodb_buffer_pool_awe_mem_mb    0
innodb_buffer_pool_size    49283072
innodb_checksums    ON
innodb_commit_concurrency    0
innodb_concurrency_tickets    500
innodb_data_file_path    ibdata1:10M:autoextend
innodb_data_home_dir     
innodb_doublewrite    ON
innodb_fast_shutdown    1
innodb_file_io_threads    4
innodb_file_per_table    OFF
innodb_flush_log_at_trx_commit    1
innodb_flush_method     
innodb_force_recovery    0
innodb_lock_wait_timeout    50
innodb_locks_unsafe_for_binlog    OFF
innodb_log_arch_dir     
innodb_log_archive    OFF
innodb_log_buffer_size    130023424
innodb_log_file_size    178257920
innodb_log_files_in_group    2
innodb_log_group_home_dir    .\
innodb_max_dirty_pages_pct    90
innodb_max_purge_lag    0
innodb_mirrored_log_groups    1
innodb_open_files    300
innodb_rollback_on_timeout    OFF
innodb_support_xa    ON
innodb_sync_spin_loops    20
innodb_table_locks    ON
innodb_thread_concurrency    8
innodb_thread_sleep_delay    10000

Автор: dark_religion 12.6.2009, 11:16
так что?

Автор: Бонифаций 13.6.2009, 19:37
Цитата

innodb_buffer_pool_size    49283072


1) Это мало. Сколько памяти на сервере?  Выдели хотя бы половину RAM.

2) Покажи explain:

explain select чегоутебятамвзапросе

3) Как делаешь дамп?  (который "зависает")

Автор: dark_religion 17.6.2009, 22:47
Привет извените что не писал случайно удалил хороший файл)) сильно большим он мне показался) думал логи какие-то а оказалось, что не логи) шас почти востановил базу) как сделаю все отпишусь)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)