2010-03-04 6 views
0

Приветствия друзей,Оптимизация простого SQL-запроса?

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

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

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

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

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

Но следующие независимые запросы требуют короткого времени.

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

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

SELECT * FROM MAB ГДЕ 1

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

Любые советы по оптимизации мой первый запрос?

+1

Используйте EXPLAIN, чтобы увидеть, как ваши запросы выполняются в базе данных. Теперь вы можете оптимизировать свои запросы и индексы. –

ответ

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

Попробуйте

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

тогда Вы должны смотреть на то, что столбцы должны вернуться, вы никогда не должны действительно использовать SELECT * вместо возврата отчетливый список требуемых имен столбцов, например, SELECT Col1, Col2, Col3 FROM ... таким образом вы минимизируете возвращаемые данные.

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

1

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

Смежные вопросы