добавьте int значение float для увеличения скорости выбора - PullRequest
0 голосов
/ 04 января 2019

Если у меня большая таблица с плавающими числами, может ли она помочь в скорости чтения, если я добавлю столбец, представляющий значение int для каждого числа с плавающей запятой? может быть, если значение int будет индексом, то когда мне нужно будет выбрать все числа с плавающей точкой, начинающиеся с определенного int, он «отфильтрует» значения, которые, безусловно, не нужны?

Например, если есть 10000 чисел, 5000 из которых начинаются с 14: 14.232, 14.666 и т. Д., Есть ли оператор sql, который может увеличить скорость выбора, если я добавлю столбец значений int?

  id  |  number   | int_value |
   1  |  11.232   |     11    |
   2  |  30.114   |     30    |
   3  |  14.888   |     14    |
  ..  |    ..     |     ..    |
 3005 |  14.332   |     14    |

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Прежде всего: у вас есть проблемы с производительностью? Если нет, то зачем волноваться?

Тогда: Вам нужно хранить десятичные дроби, но иногда вас интересует только целая часть. Да?

Итак, у вас есть один или несколько запросов типа

where number >= 14 and number < 15

или

where truncate(number, 0) = 14

У вас уже есть индексы по номеру? Э.Г.

create index idx on mytable(number);

Первое упомянутое предложение WHERE, вероятно, выиграет от этого. Второе - нет, потому что когда вы вызываете функцию для столбца, СУБД больше не видит связи с индексом. Это показывает, что вы можете изменить способ написания запроса.

Если первое предложение WHERE все еще слишком медленное, несмотря на индекс, вы можете создать вычисляемый столбец (ALTER TABLE mytable ADD numint int GENERATED ALWAYS AS truncate(number, 0) STORED), индексировать его и получить к нему доступ вместо столбца числа в вашем запросе. Но я сомневаюсь, что это заметно ускорит процесс.

Что касается вашего примера:

при наличии 10000 номеров, 5000 из которых начинаются с 14

Это не большой стол, а маленький. И поскольку вам все равно понадобится половина записей, СУБД будет просто читать все записи последовательно и смотреть на число. Не имеет значения, смотрит ли он на целое или десятичное число. (Ну, может быть, несколько наносекунд, но вы ничего не заметите.)

0 голосов
/ 04 января 2019

Вы можете создать некластеризованный индекс для самого числового столбца. и при выборе данных из таблицы вы можете отфильтровать с помощью оператора Like. Нет необходимости в дополнительном столбце,

Выберите * из mytable где число как '14% '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...