- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева

Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет.
Есть некая база MySQL, а в ней нужная таблица весом 400 кб и 2500 записей.
К этой таблице идет запрос "SELECT поле1, поле2, поле3, поле4 FROM наша_таблица WHERE a>100 AND a<1000 ORDER BY дата DESC".
Результат - все 2500 строк (но это только в этом случае, могут быть случаи, когда не все строки уходят в результат). На сам запрос и перебор всех строк уходит порядка 18 секунд (проверил через пхп, из которого идет запрос).
Вопрос следующий: возможно ли ка-то уменьшить это время с помощью добавления индексов в талицу, или какими-то другими методами?
Добавить LIMIT в запрос не предлагайте: нужны все данные и сразу.
Добавить индекс по полю a + data
Какая-то аномалия(при условии что у Вас сервер нормально дышит и не 500лохматых годов, где 1мб оперативы - мечта) получается.
Можно дамп базы в студию? Ну и код ПХПшный, который все это обрабатывает тоже желательно бы увидеть.
Какая-то аномалия
Может там перебор "хитрый" :D
А вообще, интересно, если этот же запрос засунуть в PHPMyAdmin - время изменится? ))
Какая-то аномалия(при условии что у Вас сервер нормально дышит и не 500лохматых годов, где 1мб оперативы - мечта) получается.
Можно дамп базы в студию? Ну и код ПХПшный, который все это обрабатывает тоже желательно бы увидеть.
Сервер вроде норм: 2 проца по 6 ядер 1,6 Ггц каждое, 32 Гб ОЗУ.
Извините, базу предоставить не могу: внутренняя информация компании.
Может там перебор "хитрый" :D
А вообще, интересно, если этот же запрос засунуть в PHPMyAdmin - время изменится? ))
Пробывал в PHPMyAdmin - >15 секунд
П.С. не смог сделать чтобы Limit не вставлялся в запрос, поэтому добавил к запросу LIMIT 0,2600
---------- Добавлено 10.12.2013 в 18:19 ----------
Может там перебор "хитрый" :D
А вообще, интересно, если этот же запрос засунуть в PHPMyAdmin - время изменится? ))
Добавил INDEX по полу "а" и "дата" повторил запрос в PHPMyAdmin - Запрос занял 0.0015 сек., но через браузер никаких изменений.
К этой таблице идет запрос "SELECT поле1, поле2, поле3, поле4 FROM наша_таблица WHERE a>100 AND a<1000 ORDER BY дата DESC".
...
Вопрос следующий: возможно ли ка-то уменьшить это время с помощью добавления индексов в талицу, или какими-то другими методами?
Для таблиц типа MyISAM можно попробовать сделать coverage индекс типа:
После чего проверить значение переменной key_buffer_size в my.cnf (выделенного количества памяти в идеале должно хватать для хранения всех индексов MyISAM, значения по умолчанию должно более чем хватить для одной базы в 400KB).
Однако, что-то время сильно большое для такой маленькой таблицы и такого сервера. Возможно дело совсем не в индексах, а в чем-то другом. Я бы посмотрел на что конкретно тратится время:
Пробывал в PHPMyAdmin - >15 секунд
Значит дело не в запросе.
Ваш КО
На сам запрос и перебор всех строк уходит порядка 18 секунд (проверил через пхп, из которого идет запрос).
Смотрите внимательнее, что там за "перебор"
class db {
А нафига нам этот класс? судя по всему это кусок кода с ДЛЕ.
Для таблиц типа MyISAM можно попробовать сделать coverage индекс типа:
Покрывающие индексы можно делать мне кажется и не только на myisam, но в данном случае это будет слишком избыточный индекс.
Добавил INDEX по полу "а" и "дата" повторил запрос в PHPMyAdmin - Запрос занял 0.0015 сек., но через браузер никаких изменений.
ковыряйте фетчинг вашего запроса, если там результат на 2500 строк, то за 0.0015 сек они конечно не обработаются
если там результат на 2500 строк, то за 0.0015 сек они конечно не обработаются
Это понятно, однако, 18 секунд тоже многовато.. Разве что, там ресурсоёмкая хрень какая считается..
И где смотреть результат этого запроса? Ато у меня постоянно отвечает:
"SQL-запрос был успешно выполнен
SHOW PROFILE FOR QUERY1"
и внизу мой запрос и ответ на него
Mr.Boba, еси работаете на localhost то попробуйте получить вот такую переменную
у меня возники сомнения что запрос у вас в данном сучае всего 1
а вообще я юзаю счетчики в купе со временем генерации и подсчетом испоьзованной памяти может там ответ найдете