Помимо индексации, которая уже была предложена, вы можете также изучить таблицы секционирования, если они большие.
Разбиение в MySQL
Трудно быть конкретным здесь, потому что у нас очень ограниченная информация, но правильная индексация и разделение могут пройти очень долгий путь. Правильная индексация может быть длительной темой, но в очень общем смысле вам нужно индексировать столбцы, по которым вы запрашиваете.
Например, скажем, у вас есть таблица сотрудников, и у вас есть обычные столбцы SSN, FNAME, LNAME. В дополнение к этим столбцам мы скажем, что у вас есть еще 10 столбцов в таблице.
Теперь у вас есть этот запрос:
SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN = 'blah';
Игнорируя тот факт, что SSN может быть здесь первичным ключом и может иметь уникальный индекс, вы, скорее всего, выиграете в производительности, создав еще один составной индекс, содержащий столбцы (SSN, FNAME, LNAME). Это выгодно потому, что база данных может удовлетворить этот запрос, просто просматривая составной индекс, поскольку он содержит все значения, необходимые в отсортированном и компактном пространстве. (то есть меньше ввода / вывода). Несмотря на то, что индекс только по SSN является лучшим методом доступа к полному сканированию таблиц, база данных все равно должна считывать блоки данных для индекса (ввода-вывода), находить значения, которые будут содержать указатели на записи. необходимо выполнить запрос, затем нужно будет прочитать различные блоки данных (читай: больше случайных операций ввода / вывода), чтобы получить фактические значения для fname и lname.
Это, очевидно, очень упрощено, но использование индексов таким способом может значительно сократить число операций ввода-вывода и повысить производительность вашей базы данных.
Некоторые другие ссылки здесь могут оказаться полезными: