LINUX.ORG.RU

Настройка mysql


0

0

Приветствую. Есть такой вопрос, при работе mysql использует малую часть ресурсов компа ну и считает медленно(10% загрузки проца), можна как-то заставить его считать быстрее?

★★
Ответ на: комментарий от DDR

Я не знаю почему у меня прога очень медленно обрабатывает данные и при этом почти не жрет ресурсы. Помогите пожалуйста разобраться.

DDR ★★
() автор топика
Ответ на: комментарий от DDR

И подскажите что будет быстрее работать:
1. делать селект, он вернет кучу результатов и по каждому результату делать снова селекты
2. сделать 2 вложенных селекта но чтобы он выполнялся 1 раз, а не кучей селектов?

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Второе, разумеется, быстрее. Но если это приходится делать очень часто, то можно рассмотреть вариант денормализации.

amomymous ★★★
()
Ответ на: комментарий от DDR

Кое-что есть здесь : http://ru.wikipedia.org/wiki/Денормализация Пример. Есть таблица orders и таблица production. И выполняется запрос (*) select id_order, (select count(*) from production where production.id_order=orders.id_order from orders) as acount from orders. Имеется вложенный select, который обрабатывается медленно. Тогда Вы добавляете в таблицу orders поле prod_count, которое будет содержать количество элементов в production с соответствующим id_order. Это поле Вам придется вручную обновлять при каждом изменении таблицы production, но зато сможете выполнять запрос (*) гораздо быстрее.

amomymous ★★★
()
Ответ на: комментарий от amomymous

У меня такой селект (по самой себе таблице)
select id_slovo from data_meshheadingDN_number where stat_ID in (select stat_ID from data_meshheadingDN_number where id_slovo='«+idslovo+»')
Что лучше когда он один или когда его разбить на 1 селект+ в цикле еще куча селектов?

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Может кто знает как оптимизировать? Оба поля в таблице числовые и проиндексированы.

DDR ★★
() автор топика
Ответ на: комментарий от amomymous

Да на каждый отдельный индекс. Но в итоге я не дождался пока выполниться такой вложенный запрос, хотя на циклах в проге он выполняется очень быстро, может я чо неправильно написал?

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Может и неправильно.. сколько записей возвращает подзапрос (select stat_ID from data_meshheadingDN_number where id_slovo='«+idslovo+»') ? Может, нужно переобозначить таблицу в подзапросе, например, так: (select stat_ID from data_meshheadingDN_number as dn where dn.id_slovo='«+idslovo+»') ?

Даже если с запросами все в порядке, все равно остается проблема малого использования ресурсов. Сборка MySQL обычная? Пользователь, от которого выполняются запросы, root?

amomymous ★★★
()
Ответ на: комментарий от amomymous

1. для idslovo=1, подзапрос (select stat_ID from data_meshheadingDN_number where id_slovo='«+idslovo+»') возвращает всеголишь 40, но есть слова на которых он будет возвращать 1,5млн.
2. а что даст преобразование?
3. сборка обычная из репозиториев, от рута.

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Я не дождался конца конца выполнения вложенного селекта при idslovo=1, когда вложенный селект вернул всего 40 записей.

DDR ★★
() автор топика

> 10% загрузки проца

а диск?

cobold ★★★★★
()
Ответ на: комментарий от DDR

что говорит?

explain
select id_slovo from data_meshheadingDN_number where stat_ID in (select stat_ID from data_meshheadingDN_number where id_slovo='"+idslovo+"')

а что если попробовать так?

explain
select t1.id_slovo from data_meshheadingDN_number t1
inner join data_meshheadingDN_number t2 using(stat_ID)
where t2.id_slovo='"+idslovo+"'

cobold ★★★★★
()
Ответ на: комментарий от DDR

Попробуйте JOIN вместо подзапроса. У оптимизатора пока еще много проблем с подзапросами. А вообще нужно смотреть на EXPLAIN запроса.

sjinks ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.