Простые вопросы вывода MySQL - PullRequest
0 голосов
/ 07 мая 2011

У меня есть таблица из двух строк, относящаяся к числу, и этот куб чисел.Прямо сейчас у меня вставлено около 13 миллионов номеров, и оно растет очень и очень быстро.

Есть ли более быстрый способ вывода простых таблиц быстрее, чем при использовании такой команды, как SELECT * FROM table?


Мой второй вопрос касается выбора диапазона чисел.Как указано выше, у меня есть большая база данных, которая очень быстро растет, чтобы хранить числа и их кубы.Если вам интересно, я пытаюсь найти 3 числа, которые в сумме составят до 33 при кубе.Итак, я делаю это с помощью программы сервер / клиент для отправки диапазона чисел клиенту, чтобы они могли выполнять уравнения для указанного диапазона чисел.

Итак, например, скажем, чтозвонит первый клиент. Я даю ему диапазон 0, 100. Затем он уходит, чтобы вычислить числа и доложить, чтобы сообщить серверу, нашел ли он триплет.Если он этого не сделал, цикл просто продолжится.

Когда клиент сам выполняет вычисления для чисел, он идет очень медленно.Итак, я решил использовать базу данных для хранения чисел в кубах, чтобы клиент не выполнял вычисления.Проблема в том, что я не знаю, как получить доступ только к диапазону номеров.Например, если у клиента был диапазон 0-100, ему нужно было бы получить доступ к кубам всех чисел от 0 до 100.

Что такое команда выбора, которая будет возвращать диапазон чисел?


Я использую таблицу для MyISAM.

1 Ответ

2 голосов
/ 07 мая 2011

Если ваша таблица "mytable" имеет два столбца

number     cube
  0         0
  1         1
  2         8
  3         27

, команда запроса будет (при условии, что начало диапазона составляет 100, а конец - 200):

select number, cube from mytable where number between 100 and 200 order by number;

Если вы хотите, чтобы этот запрос был максимально быстрым, убедитесь в следующем:

  • число является индексом.Таким образом, вам не нужно выполнять сканирование таблицы, чтобы найти начало вашего диапазона.
  • индекс, который вы создаете, кластеризован.Кластерные индексы гораздо быстрее для таких сканирований, так как лист в индексе является записью (для сравнения, лист в некластеризованном индексе является указателем на запись, которая может находиться в совершенно другой
    части диска).Кроме того, кластеризованный индекс навязывает отсортированную структуру данных.Таким образом, вы можете прочитать все 100 записей из одного блока.

Конечно, добавление индекса сделает запись в таблицу немного медленнее.Кроме того, я предполагаю, что вы пишете в таблицу по порядку (то есть 0,1,2,3,4 и т. Д., А не 10,5,100,3 и т. Д.).Запись в таблицы с кластеризованными индексами происходит очень медленно, если вы записываете в таблицу в случайном порядке (поскольку БД должна продолжать перемещать записи, чтобы соответствовать новым).

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