mySQL - поиск строки по номеру строки? - PullRequest
0 голосов
/ 29 июня 2018

Вопрос от общего новичка MySQL. Я пытаюсь создать таблицу, содержащую информацию о деталях машины (винты, кронштейны, цилиндры и т. Д.), И каждая часть соответствует машине, которой принадлежит эта деталь. База данных будет спроектирована таким образом, чтобы каждый раз, когда клиент считывал данные из таблицы, были выбраны все детали с одного указанного компьютера. Я пытаюсь выяснить самый быстрый способ, которым все строки, подпадающие под определенную категорию, могут быть прочитаны с диска.

Сортировка таблицы невозможна, так как многие люди могут добавлять строки в таблицу одновременно. Использование таблицы для каждой машины также нецелесообразно, поскольку могут быть созданы новые машины. Я ожидаю, что он должен будет обрабатывать много операций INSERT и SELECT, но почти никаких операций DELETE. Я разработал план, позволяющий быстро идентифицировать каждую деталь, принадлежащую какой-либо машине, и пришел спросить, насколько это практично:

Каждая строка, содержащая данные для детали станка, будет содержать номер строки предыдущей детали и следующую деталь для той же машины. Отдельная таблица будет содержать номер строки последней части каждого компьютера, который отображается в таблице. Сценарий может следовать за списком этих «указателей», пропуская различные части таблицы, пока все части не будут найдены.

TL; DR

Будет ли такой подход поиска строки по ее номеру строки быстрее, чем поиск по целочисленному первичному ключу (поскольку первичный ключ не обязательно указывает позицию в таблице)? Насколько быстрее это будет? Приведет ли это к заметному улучшению производительности по сравнению с использованием индекса?

1 Ответ

0 голосов
/ 29 июня 2018

Это был бы ужасный подход. Выбор строк, соответствующих некоторым критериям, является фундаментальной особенностью MySQL (или любого другого движка БД на самом деле ...).

Просто создайте столбец с именем machine_id в таблице деталей и присвойте идентификатор каждому станку.
Вы можете поместить свои машины в таблицу machines и использовать их первичный ключ в поле machine_id таблицы parts.

Тогда все, что вам нужно сделать, чтобы получить ВСЕ части машины 42:
SELECT * FROM parts WHERE machine_id = 42;

Если ваша база данных огромна, вы также можете рассмотреть возможность индексации столбец machine_id для повышения производительности.

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