Простые вопросы вывода MySQL

0

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

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


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

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

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

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


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

  • 3
    SELECT * не рекомендуется, поскольку запрос может зависать в зависимости от типов данных (IE: BLOB). Выберите только то, что вам нужно
  • 0
    Читайте о LIMIT и OFFSET : stackoverflow.com/search?q=mysql+limit
Показать ещё 1 комментарий
Теги:

1 ответ

2
Лучший ответ

Если ваша таблица "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 и т.д.). Записи в таблицах с кластеризованными индексами очень медленны, если вы пишете в таблицу в случайном порядке (поскольку БД должна сохранять движущиеся записи в соответствии с новыми).

  • 0
    Большое спасибо за этот ответ, однако у меня есть несколько вопросов, так как я являюсь новичком MySQL. Во-первых, под индексом я думаю, что вы имеете в виду ключ? У меня есть номер столбца n, установленный в качестве первичного ключа для таблицы. Я считаю, что это индекс, но, пожалуйста, поправьте меня, если я ошибаюсь. Во-вторых, как мне создать кластерную БД?
  • 0
    +1 Хорошо. Вы можете добавить случай для чисел с плавающей и не по порядку (добавление индекса и использование between-where в индексе или использование limit-offset ).
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню