Комментарии 18
Напишите, пожалуйста, как потом обращаться к «разбитой» таблице. И в чем плюс партиций?
+3
Со стороны «клиента» все прозрачно. Тоесть для «клиента» никакой разницы, есть PARTITION или его нет.
Разница есть для Mysql сервера и ОС.
Во первых файл таблицы не один огромный, 2-3-4-10G, а несколько поменьше — 200-300-500-700Mb.
При поиске в таблице (where) mysql проходит только по нужно «кусочку» а не перелопачивает весь файл таблицы целиком.
Это очень сильно облегчает жизнь таблиц в которых работают в основном с последними данными и в которых много старых данных которые нельзя удалять.
Explain partitions показывает какие части будут обработаны (колонка partitions)
P.S. На всякий случай скажу что затея имеет смысл если включена опция innodb_file_per_table
Разница есть для 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
+3
P.S. На всякий случай скажу что затея имеет смысл если включена опция innodb_file_per_table
Что желательно делать в любом случае, хоть с partitioning, хоть без.
+2
могли бы вы немного рассказать, почему желательно?
и если можно, то какие ещё опции желательно добавлять в конфигурацию по умолчанию.
и если можно, то какие ещё опции желательно добавлять в конфигурацию по умолчанию.
0
могли бы вы немного рассказать, почему желательно?
Потому что иначе при настройках по умолчанию будет бесконечно расти файл ibdata1, уменьшить который можно только если сделать дамп всех баз, удалить файл и загрузить дамп обратно.
и если можно, то какие ещё опции желательно добавлять в конфигурацию по умолчанию.
Ну если пытаться уместить ответ в одном комментарии, то вот: 1, 2, 3 :)
+1
А при настройке 1файл-1таблица эти файлы с данными не растут бесконечно? В смысле, если я выполню «DELETE FROM TABLE t», то файл-контейнер для t уменьшится в размере?
0
Мне тоже интересно.
Но как я понял, если innodb_file_per_table=0, то все таблицы хранятся в одном файле и это не очень хорошо, т.к. поиск в одном большом файле более проблематичный, чем в нескольких поменьше. Если innodb_file_per_table=1, то каждая таблица хранится в отдельном файле.
Поправьте меня, если я не прав.
Но как я понял, если innodb_file_per_table=0, то все таблицы хранятся в одном файле и это не очень хорошо, т.к. поиск в одном большом файле более проблематичный, чем в нескольких поменьше. Если innodb_file_per_table=1, то каждая таблица хранится в отдельном файле.
Поправьте меня, если я не прав.
0
А вы все эти
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) ,
Руками делаете или как-то автоматически? В БД нет поддержки автоматической генерации диапазонов партиционирования?+2
А где потом увидеть эти партиции? phpAdmin не показывает даже при explain.
0
А у меня так работает
date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Mysql PARTITION BY YEAR(date) / MONTH(date) / DAYOFWEEK(date)