Оптимизация простого SQL-запроса? - PullRequest
0 голосов
/ 04 марта 2010

Привет друзья,

В моей базе данных MySQL у меня есть таблица 'MAB', которая содержит информацию о идентификаторах генов (GI_ID) и некоторую другую информацию, связанную с генами.

Таблица 'MAB_CAN' может содержать идентификаторы генов (GI_ID), относящиеся только к раку.

Я использую следующий SQL-запрос для получения информации о раке из таблицы MAB:

SELECT * FROM MAB WHERE `GI_ID` IN (SELECT `GI ID` FROM `MAB_CAN`)

Это занимает около 14 секунд для этого запроса, что слишком долго. (1605 записей).

Но для следующих независимых запросов это займет короткое время.

ВЫБРАТЬ GI_ID ОТ MAB_CAN ГДЕ 1

  • 0,0005 секунд (1 605 записей)

ВЫБРАТЬ * ОТ MAB ГДЕ 1

  • 0,0007 с (31 043 записи)

Какие-нибудь советы по оптимизации моего первого запроса?

Ответы [ 3 ]

3 голосов
/ 04 марта 2010

Попробуйте это

SELECT * FROM MAB
   INNER JOIN MAB_CAN ON MAB.GI_ID = MAB_CAN.GI_ID

Затем вам нужно посмотреть, какие столбцы вам нужно вернуть, вы никогда не должны использовать SELECT *, а вместо этого возвращать отдельный список требуемых имен столбцов, например. ВЫБЕРИТЕ Col1, Col2, Col3 ОТ ... чтобы минимизировать возвращаемые данные.

Как и в других ответах, если запрос все еще медленный, вам нужно посмотреть на размещение индекса в поле GI_ID в таблице MAB.

2 голосов
/ 04 марта 2010
  1. заменить * именами столбцов
  2. создать некластеризованный индекс по GI_ID
1 голос
/ 04 марта 2010

Вы можете начать с создания индекса по столбцу GI_ID в таблице MAB.

...