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