Как стать автором
Обновить

Комментарии 18

Напишите, пожалуйста, как потом обращаться к «разбитой» таблице. И в чем плюс партиций?
В документации все есть впринципе.
Если вкратце — обращатся так же. Плюс в том что данные и индексы разделов лежат отдельно.
хм.

Ну и кто со мной несогласен?
Это же Хабр! ;) Тут это норма ставить минусы не за что. Реально не за что(
Со стороны «клиента» все прозрачно. Тоесть для «клиента» никакой разницы, есть PARTITION или его нет.
Разница есть для Mysql сервера и ОС.
Во первых файл таблицы не один огромный, 2-3-4-10G, а несколько поменьше — 200-300-500-700Mb.
При поиске в таблице (where) mysql проходит только по нужно «кусочку» а не перелопачивает весь файл таблицы целиком.

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

Explain partitions показывает какие части будут обработаны (колонка partitions)

mysql> explain partitions select * from foo where date_added between '2010-03-11' and '2010-03-12';
+----+-------------+------------+------------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table      | partitions | type  | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+------------+------------+-------+---------------+------+---------+------+------+-------------+
| 1  | SIMPLE      | foo      | p1,p4      | range | day           | day  | 3       | NULL | 79   | Using where |
+----+-------------+------------+------------+-------+---------------+------+---------+------+------+-------------+


P.S. На всякий случай скажу что затея имеет смысл если включена опция innodb_file_per_table
P.S. На всякий случай скажу что затея имеет смысл если включена опция innodb_file_per_table

Что желательно делать в любом случае, хоть с partitioning, хоть без.
могли бы вы немного рассказать, почему желательно?
и если можно, то какие ещё опции желательно добавлять в конфигурацию по умолчанию.
могли бы вы немного рассказать, почему желательно?

Потому что иначе при настройках по умолчанию будет бесконечно расти файл ibdata1, уменьшить который можно только если сделать дамп всех баз, удалить файл и загрузить дамп обратно.
и если можно, то какие ещё опции желательно добавлять в конфигурацию по умолчанию.

Ну если пытаться уместить ответ в одном комментарии, то вот: 1, 2, 3 :)
А при настройке 1файл-1таблица эти файлы с данными не растут бесконечно? В смысле, если я выполню «DELETE FROM TABLE t», то файл-контейнер для t уменьшится в размере?
Не уменьшится, т. е., да, тоже растут. Но при одной таблице в одном файле им можно делать OPTIMIZE TABLE, и незанятое пространство будет высвобождаться.
Если выполните TRUNCATE TABLE — то уменьшится
Мне тоже интересно.
Но как я понял, если innodb_file_per_table=0, то все таблицы хранятся в одном файле и это не очень хорошо, т.к. поиск в одном большом файле более проблематичный, чем в нескольких поменьше. Если innodb_file_per_table=1, то каждая таблица хранится в отдельном файле.
Поправьте меня, если я не прав.
А вы все эти
 ALTER TABLE foo PARTITION BY RANGE (MONTH(date_added))
(
PARTITION p01 VALUES LESS THAN (02) ,
PARTITION p02 VALUES LESS THAN (03) ,
PARTITION p03 VALUES LESS THAN (04) ,
PARTITION p04 VALUES LESS THAN (05) ,
Руками делаете или как-то автоматически? В БД нет поддержки автоматической генерации диапазонов партиционирования?
Насколько я знаю, автоматической генерации нет. Нужно руками генерить эти партиции наперед.
А где потом увидеть эти партиции? phpAdmin не показывает даже при explain.
explain partitions
Ну и show create table
А у меня так работает

date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории