serg_small_developer
@serg_small_developer
Начинающий прогер

Как правильно расставить индексы mysql?

Всем привет. Дело такое...
Делаю я сканер сайтмапа для своих проектов, все сделал все настроил (именно сканер), а вот с базой никак не могу разобраться (принцип работы такой, я сканирую первый раз сайтмап, ложу данные в таблицу 1, потом через время я повторно сканирую сайтмап и сохраняю данные в таблицу 2 (которая по структуре точно как таблица 1) по завершении скана я беру и сравниваю две таблицы на наличия новых урлов, изменений в тайтлах и т.д., и записываю изменения в таблицу 3 и после этого удаляю из таблицы 2 все данные для следующего сравнения, все работает нормально, но только на малых объемах т.е. до 100 000 еще терпимо, а когда в базе 500 000 и больше то один запрос сравнения занимает больше 300 секунд, сам я не специалист по базам пока что только учусь, и прошу подсказать как правильно нужно построить индексы для быстрого сравнения, вот пример одного из запросов которые я использую для сравнения
self.cursor.execute("""SELECT * FROM table1 LEFT JOIN table2 ON table1.url = table2.url WHERE table1.id_project = %s AND table2.url IS NOT NULL AND table1.title != table2.title""", (self.id,))
New_Url = self.cursor.fetchall()
if New_Url:
	list1= []
	list2= []
	for value in New_Url:
		list1.append( {"before":value[6], "after":value[14]} )
		list2.append( (value[14], value[2], value[1]) )
	json= json.dumps(list1)
	self.cursor.execute("""insert into table3(id_site, name_changes, changes, date) values (%s, %s, %s, %s)""", (self.id, 'title', json, today) ) self.cursor.executemany ("""UPDATE table1 SET title=%s WHERE url=%s AND id_project = %s""", list2)

т.е. мне нужно выполнить запрос для выборки, а потом сделать апдейт и запись, я читал про индексы что их нужно строить так как будет выборка типа если сделать по первому и второму поля то индексы будут записаны поле1поле2, и нужно их делать только по тем полям по которым будет выборка, но как быть мне если у меня идет поочередная выборка с каждым столбцом, выходи что в индексы нужно добавить все столбцы?
вот моя таблица
PPndCz.jpg
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Индексы ставить в зависимости от запросов, которые предполагаются для выборки этих данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы