Медленный CREATE TABLE с движком MariaDB ColumnStore - PullRequest
0 голосов
/ 18 апреля 2020
  1. Система: Ubuntu 18 - SSD
  2. MariaDB ColumnStore версия: 1.2.5
  3. Строки таблицы: 3

Если сравнить таблицу создания Операция, выполненная InnoDB перед ColumnStore, InnoDB запускается в X раз быстрее, чем ColumnStore.

Я выполнил несколько CREATE TABLE с INSERT AS SELECT, используя движок ColumnStore. Результаты очень медленные. Это последовательность:

DROP table IF EXISTS example;

CREATE TABLE IF NOT EXISTS example
  (num INT(11),meta DECIMAL(14,4),min INT(11),max INT(11))
ENGINE=columnstore;

INSERT INTO example 
 (num, meta, min, max)
AS SELECT num, meta, min, max FROM old_example;

-- TIME TO EXECUTE
-- On row affected, taking 2.8s

Теперь рассмотрим, как я поступил с InnoDB


DROP table IF EXISTS example;

CREATE TABLE IF NOT EXISTS example
  (num INT(11),meta DECIMAL(14,4),min INT(11),max INT(11))
  (SELECT num, meta, min, max FROM old_example);

-- TIME TO EXECUTE
-- On row affected, taking 103ms

Обратите внимание: 1 : я знаю, что на сначала я делаю еще одну операцию, и она отличается, но я провел трассировку, выполняя каждый из разделенных запросов, и обнаружил, что CREATE TABLE с ENGINE = ColumnStore - это та процедура, которая занимает так много времени. Примите к сведению 2 : MariaDB columnstore теперь имеет Операция CREATE AS SELECT .

Учитывая это, вот несколько вопросов:

Вопрос 1 : Есть ли какая-нибудь конфигурация MariaDB ColumnStore, которую я могу сделать, чтобы сделать возможным создание табличной операции, а затем быстрее вставлять данные из другой таблицы? Вопрос 2 : MariaDB ColumnStore быстрее только для выбора?

1 Ответ

0 голосов
/ 27 апреля 2020

Ожидается разница в скорости.

Исходя из времени, я подозреваю, что набор данных крошечный.

Columnstore предназначен для обработки очень больших наборов данных, поэтому не оптимизируется для крошечных sets.

Рассматривая внутреннюю структуру Columnstore, вы найдете несколько больших структур, сжатие и индексацию каждого столбца. Кроме того, существует много возможных методов сжатия; Вероятно, он тщательно изучает данные, чтобы решить, какой из них использовать для каждого столбца. Все они нацелены на производительность SELECT за счет любых других операций.

В вашей таблице InnoDB нет индексов, нет сжатия, и занимаемая площадь диска, несмотря на отсутствие сжатия, вероятно, намного меньше , (При большей таблице InnoDB будет больше.)

У Columnstore есть ниша; используйте это для этого; не ожидайте, что он будет конкурентоспособным по отношению к InnoDB во всех областях.

...