Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 235
от 01.04.2007, 12:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 408, Экспертов: 49
В номере:Вопросов: 1, Ответов: 3


Вопрос № 79901: Здравствуйте эксперты. Есть в наличии 2 таблицы (в приложении). Таблица blocks содержит примерно 2,5 миллиона записей, все поля числовые. Таблица location содержит примерно 200 тысяч записей. Запросов на выборку значений намечаетс...

Вопрос № 79.901
Здравствуйте эксперты.
Есть в наличии 2 таблицы (в приложении).
Таблица blocks содержит примерно 2,5 миллиона записей,
все поля числовые.
Таблица location содержит примерно 200 тысяч записей.
Запросов на выборку значений намечается более 30 000 в день.
Обе таблицы связанны между собой по полю id, нужно выбрать все поля из таблицы location.
На данный момент делается 2 запроса, первый запрос к таблице blocks имеет логику SELECT `id` from `blocks` where `ip_start`<='1441400593' and `ip_stop` >='1441400593' и второй к таблице location SELECT* from `location` where `id`='184'.
Из-за того, что записей и обращений к базе данных ( MySQL) очень много они обрабатываются непростительно долго.
Как можно оптимизировать запросы, может вместо двух делать один? Может создать "хитрые" индексы?
Какие могут быть варианты оптимизации??

Приложение:

Отправлен: 27.03.2007, 07:07
Вопрос задал: Cimus (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: dianacode
Доброе время суток, Cimus

первое, куда вы длжны были пойти - это оригинал документации, в нашем случае - документация mysql на оффсайте http://dev.mysql.com/doc/refman/5.1/en/optimization.html

с уважением, удачи

---------
There is more than one way to do it.
Ответ отправила: dianacode (статус: Студент)
Ответ отправлен: 27.03.2007, 09:10
Оценка за ответ: 3
Комментарий оценки:
Увеличить быстродействие получилось только после выноса таблицы blocks в текстовый файл, об этом в мануале не пишут. (Смотрите мини-форум)
Ваш ответ не имеет вообще смысла.

Отвечает: Игорь Елизаров
Здравствуйте, Cimus!
Первое, на что надо обратить внимание - индексация таблиц.
Если поле id в таблице location уникально, сделайте его первичным ключем этой таблицы.

аналогично рекомендуется сделать первичный ключ и для таблицы Blocks но там, похоже, для этого надо будет добавить поле id_block и сделать его уникальным.

скорее всего, дело именно в этом.

с уважением, Игорь


---------
Пользователь - тоже человек..
Ответ отправил: Игорь Елизаров (статус: 10-ый класс)
Ответ отправлен: 27.03.2007, 09:11
Оценка за ответ: 4
Комментарий оценки:
БД MySQL не обеспечила должной производительности, был найден другой метод. (См. мини-форум)

Отвечает: Архангельский Андрей Германович
Здравствуйте, Cimus!

1) не увидел обычных Primary key - поставьте их по крайней мере во второй таблице на ID
2) У вас два поля сравнения в 1 запросе. Сделайте два простых индекса - отдельно на поле ip_start и отдельно на поле ip_stop
И, наконец, многое зависит, от того сколько записей в результате запроса. Если их больше чем 20% от общего количества то индексы помогают мало.

Посмотрите план запроса - скорее всего MySQL создает именно такие индексы - поэтому их лучше создать в ручную.

Непонятно, что хотите получить в результате - возможно один запрос будет давать лучшие результаты.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 27.03.2007, 10:59
Оценка за ответ: 4
Комментарий оценки:
Результат выборки всего 1 запись, индексы по полям ip_start и ip_stop на скорость выборки не повлияли. См. мини-форум.


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: support@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.46 от 18.03.2007
Яндекс Rambler's Top100

В избранное