Очень большое время выполнения запроса

scorpion_11
Дата: 14.12.2012 10:53:56
Есть база из 2 таблиц в каждой по 200 000 записей.
1. Товары
id int(10) auto_increment
idtov int(10)
cenad1 float

2. Описание
idopis int(10) auto_increment
idtov varchar(10)
kropis longtext

нужно вывести:
idtov,kropis,cenad1.

SELECT STRAIGHT_JOIN tov.idtov, tov.cenad1, opis.kropis FROM tov INNER JOIN opis ON tov.idtov=opis.idtov  ORDER BY tov.cenad1 LIMIT  0, 10


SELECT tov.idtov, tov.cenad1, opis.kropis FROM tov,opis WHERE tov.idtov=opis.idtov ORDER BY tov.cenad1  LIMIT  0, 10


Запрос выполняется больше 10 минут.
Базу изменять нежелательно. Можно как нибудь ускорить процесс?
trew
Дата: 14.12.2012 11:16:35
scorpion_11,

почему в таблицах поле имеет разный тип?
idtov int(10)
idtov varchar(10)

у вас происходит неявное приведение типов tov.idtov=opis.idtov, вот и тормозит.
tanglir
Дата: 14.12.2012 11:18:11
scorpion_11
Базу изменять нежелательно
Ну хотя бы индексы на tov.idtov,opis.idtov,tov.cenad1 можно создать?
tanglir
Дата: 14.12.2012 11:19:39
trew
у вас происходит неявное приведение типов tov.idtov=opis.idtov, вот и тормозит.
В десятку, а я проглядел. Индексирование тогда навряд ли поможет.
scorpion_11
Дата: 14.12.2012 11:34:50
Слона как раз я и не заметил.
Индексы были, но как вы поняли они не помогли.
Вопрос еще один, я так понял надо изменять тип данных в таблице товары на varchar?
tanglir
Дата: 14.12.2012 11:49:50
scorpion_11,

вообще-то лучше на int. Если только у вас там нецифровых символов нет.
trew
Дата: 14.12.2012 11:51:00
scorpion_11
Слона как раз я и не заметил.
Индексы были, но как вы поняли они не помогли.
Вопрос еще один, я так понял надо изменять тип данных в таблице товары на varchar?

всё зависит от результата, который вы хотите получить. Задача ускорить или замедлить работу БД?

размер поля INT занимает 4 байта
размер поля VARCHAR(10) занимает 10+1 =11 байт

Т.е. это будет влиять на размер таблицы, а также скрость выполения запросов.
Требования к памяти для типов полей
scorpion_11
Дата: 14.12.2012 11:52:47
trew
scorpion_11
Слона как раз я и не заметил.
Индексы были, но как вы поняли они не помогли.
Вопрос еще один, я так понял надо изменять тип данных в таблице товары на varchar?

всё зависит от результата, который вы хотите получить. Задача ускорить или замедлить работу БД?

размер поля INT занимает 4 байта
размер поля VARCHAR(10) занимает 10+1 =11 байт

Т.е. это будет влиять на размер таблицы, а также скрость выполения запросов.
Требования к памяти для типов полей

Я понимаю что лучше int. Просто если наоборот mysql ругается.
trew
Дата: 14.12.2012 12:04:42
scorpion_11,

Создайте новый столец.
Скопируйте данные из старого (возможно через CONVERT)
Удалите старый столбец.
Переименуйте новый столбец.
trew
Дата: 14.12.2012 12:26:25
scorpion_11
Я понимаю что лучше int. Просто если наоборот mysql ругается.

Возможно, в поле VARCHAR есть буквы или др. знаки отличные от цифр.