Поместите указатель в колонку типа и используйте вторую версию, это будет намного быстрее. Также обратите внимание, что я думаю, что вы немного запутались в том, что такое база данных. База данных представляет собой набор таблиц (а также триггеры, хранимые процедуры, представления и т. Д.), Так что имена таблиц с именем somethingDB немного запутывают .. Когда я говорю индекс, я имею в виду индекс базы данных (ничего общего с тем, что похоже на столбец, который вы назвали индексом).
для создания столбца и индекс вы используете что-то вроде этого (для MySQL)
ALTER TABLE dataDB ADD COLUMN `type` varchar(64)
CREATE INDEX type_index ON dataDB(type)
аналогичные для других СУБД
Как воспитывался в комментариях, то вы должны присоединиться на колонке типа , Вы можете либо иметь таблицу, которая имеет типы, и идентификатор автоматического увеличения, и уникальное ограничение для поля типа/имени. Затем используйте идентификатор автоматического увеличения в качестве внешнего ключа или просто создайте таблицу типов с одним столбцом (тип) который является первичным ключом. В любом случае это будет работать, и у обоих есть преимущества (я бы пошел с автоинкрементным столбцом, так как считаю, что более гибко работать с кодом).
Если ты пойти со столбцом автоматического приращения вы бы это:
CREATE TABLE dataType (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(64) UNIQUE
)
ALTER TABLE dataDB ADD COLUMN `type` INT;
ALTER TABLE dataDB ADD CONSTRAINT fk_type FOREIGN KEY (type) REFERENCES dataType(id);
тогда, когда вы идете на запрос dataDB, если вы хотите, имена типов (в отличие от целых чисел), вы бы сделать присоединиться как это:
SELECT dataDB.list, dataType.name FROM dataDB
INNER JOIN dataType ON dataDB.type=dataType.id
where dataDB.type="$type"
Это предполагает, типы какой-то имя, а не целые числа, чтобы начать с, хотя, если бы они были целыми числами все вместе просто сделать значение INT только столбец таблицы DATATYPE и, таким образом, было бы ваш первичный ключ.
, что зависит от количества различных типов. если у него только 5 типов для 100 наборов данных, индекс никогда не будет использоваться, потому что он получил только селективность <20%. но я согласен с вашим ответом. используйте вторую версию и присоединитесь к таблице typeDB. – Basti
Я бы сделал одно изменение, потому что я бы включил 'dataDB.type = '$ type" 'в спецификацию' datatType ON', чтобы ограничить соединяемые строки, так как в настоящее время вы присоедините все строки из 'dataType' на 'dataDB', даже если запрашивается только подмножество' dataType'. Не учитывать небольшие столы, но хорошая практика, когда таблица растет. –
hmm интересный catch.Я никогда не понимал, какова разница между помещением дополнительных условий в предложение ВКЛЮЧАЕТ предложение WHERE. –