2014-11-11 2 views
0

У меня есть следующие запросы по одному выполнениюMySQL запросов, как оптимизировать это лучше

Удалить из secure_dl_ipmap КУДА метки времени < (NOW() - ИНТЕРВАЛ {$ дней} ДЕНЬ)

ВЫБРАТЬ нулевые ОТ secure_dl_ddown д ГДЕ d.id = id_file

удалить из secure_dl_ddown WHERE ID НЕ В (SELECT i.id_file ОТ secure_dl_ipmap I)

secure_dl_ddown столик

  • ID: INT (10)
  • actuallink: Текст
  • pretendname: VARCHAR (100)
  • whoreferred: Текст
  • размер: int (11)

нет указателей. id, actallink, whoreferred является основным

около 100 тыс. строк;

secure_dl_ipmap столик

  • ID: INT (10)
  • id_file: INT (10)
  • IPAddress: VARCHAR (15)
  • dccode : varchar (30)
  • метка времени: временная метка
  • см: текст

нет индексов. id & см. в качестве первичного

около 100 тыс. строк;

Есть ли у вас идеи, как изменить запросы и, если необходимо, индексировать таблицы?

+0

Как вы знаете, что вам нужно оптимизировать? Запросы выполняются медленно? Я думаю да. Посмотрите в Интернет для предложения EXPLAIN, я уверен, что он ответит на ваш вопрос. –

+0

Потому что он выполнен в течение 17 секунд. Спасибо за совет. Я посмотрю раздел «Объяснение». –

ответ

3

Добавить BTREE индекс secure_dl_ipmap.timestamp и индекс HASH на secure_dl_ddown.id:

ALTER TABLE secure_dl_ipmap ADD INDEX idIdx USING BTREE (timestamp); 
ALTER TABLE secure_dl_ddown ADD INDEX idIdx USING HASH (id); 

фона, что BTREE индексы лучше использовать для диапазона запросов (например, ваш «ниже»). HASH индексы быстрые на «равных» селекторах.

EDIT

Чтобы ускорить DELETE операции, которые вы можете использовать DELETE QUICK FROM ... как указано here:

If you are going to delete many rows from a table, it might be faster 
to use DELETE QUICK followed by OPTIMIZE TABLE. 
This rebuilds the index rather than performing many index block 
merge operations. 

EDIT2

После подсказки найти на той же странице, попробуйте это:

DELETE secure_dl_ddown 
FROM secure_dl_ddown 
LEFT JOIN secure_dl_ipmap ON secure_dl_ddown.id=secure_dl_ipmap.id_file 
WHERE secure_dl_ipmap.id_file IS NULL 

(для удаления строк, которые существуют в t1, которые не совпадают с t2, используйте LEFT JOIN)

+0

Привет @Benni Я проверю его и дам вам знать, как он работает. –

+0

Не очень помогает время очень большое, может быть, на 1 секунду меньше. –

+0

Пожалуйста, дайте нам вывод вашего 'EXPLAIN SELECT ...' – Benvorth