- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
но индекс не используется:
Просто индекс id лишний, как я уже писал быстрее PK ничего нет, в вашем запросе используется индекс (столбец key), если бы не использовался там был бы NULL.
только запрос сделал на 167 ID чтобы долго не ждать
Запрос то не выполняется...
167 ID чтобы долго не ждать, запрос выполнился за 0,05сек
Запрос или explain? Сколько выполняется запрос на 100 id?
Милованов Ю.С, делить смысла нету, так как полная база нужна для общих запросов.
Зачем запчасти для мазды искать в других марках?
В общей таблице ищем общие запросы.
Сколько выполняется запрос на 100 id?
Вот результат:
Настройки source сфинкса можете показать?
Для конкретного поиска.
Sphinx то отрабатывает нормально, это уже потом MySQL запрос долго выбирает данные по ID.
Кстати, очень может быть, что множество одиночных селектов выполнится намного быстрее, чем один но большой.
Возможно, хотел поделить список ID по 1000 и делать N запросов по 1000 ID, но решил всётаки тему создать и спросить почему всётаки такая медленная выборка по большому списку ID. Может в конфиге my.cnf что-то подкрутить?
Кстати может можно как-то в Sphinx сделать чтобы он выводил вместо ID нужное мне поле и тогда не надо было бы делать дополнительный запрос в таблицу MySQL?
Кстати может можно как-то в Sphinx сделать чтобы он выводил вместо ID нужное мне поле и тогда не надо было бы делать дополнительный запрос в таблицу MySQL?
Нет, записи сфинкс не хранит, только индексы.
1. Какой размер таблицы? В мегабайтах?
2. Замерьте время выполнения select * from table
3. Какими ресурсами сервера вы располагаете?
---------- Добавлено 04.02.2013 в 18:22 ----------
Милованов Ю.С, делить смысла нету, так как полная база нужна для общих запросов.
Для повышения производительности на высоконагруженных проектах частенько делают сознательную денормализацию (избыточное хранение) данных. Ничего вы этом такого страшного нет.
Кстати, еще один вопрос, а что происходит с этими 30 тысячами записей дальше? Вы их все вываливаете пользователю одновременно? Или все же, с постраничным делением?
Нет, записи сфинкс не хранит, только индексы.
1. Какой размер таблицы? В мегабайтах?
2. Замерьте время выполнения select * from table
3. Какими ресурсами сервера вы располагаете?
1) 95,2Гб
2) Отображает строки 0 - 29 (1,151,918,377 всего, запрос занял 0.0005 сек.)
3) Core I5-760, 10ГБ ОЗУ
Кстати, еще один вопрос, а что происходит с этими 30 тысячами записей дальше? Вы их все вываливаете пользователю одновременно? Или все же, с постраничным делением?
Записываются в текстовый файл.
Можно попробовать:
- postgresql (перенести)
- percona
- увеличить память на сервере и дать большее количество под кеш БД
- попробовать в цикле брать малыми частями данные из БД
- использовать систему кеширования, выловив часто используемые данные.
но тут везде надо вникать в систему, её задачи, архитектуру
Возможно, хотел поделить список ID по 1000 и делать N запросов по 1000 ID
Думаю, есть смысл затестить... Есть ощущение, что сервер лишнее пытается на диск записать (кэшировать? другие приложения из памяти в SWAP скидать). А что "на графиках" в момент запроса?
p.s. Если в кэш складывает - можно SELECT SQL_NO_CACHE попробовать - результат ведь повторно не скоро потребуется?
настройки мускуля так же покажите.
Есть вариант переехать на SSD, чтобы туда повесить базу и пусть там будет чисто она одна.
Ещё вариант сделать кэш. Я не думаю, что юзеры дёргают всё это количество записей т.е. самые популярные записывать в отдельную табличку, а уже не достающие дописывать по мере необходимости.
Я не думаю, что юзеры дёргают всё это количество записей т.е. самые популярные записывать в отдельную табличку
По поводу популярных чуть выше:
Кстати, еще один вопрос, а что происходит с этими 30 тысячами записей дальше? Вы их все вываливаете пользователю одновременно? Или все же, с постраничным делением?
Запрос выполнеятся за 24 минуты. Все ID не перечислил, но их 30000.
уверен дело не в миллиарде, а как раз в этих 30к, сам запрос получается большой по длине (в смысле текст) и всё время в основном уходит на его разбор и преобразование громадного параметра IN ().
Рекомендую вам либо разбить запрос на составляющие, например по ~1к, тем более, что выборка идёт по id значит рез. значения и так будут без повторений
или второй вариант передать параметр id в in не явным образом, а например через запись в промежуточную таблицу, а затем уже её через обычный join соединить с вашей FULL, а ещё лучше ☝ переписать запрос в обратную сторону в виде
но тут желательно проверить:) хотя я более чем уверен.
Попробуйте и отпишите какой выигрыш🤪
p.s.
и кстати для массовой выгрузки и загрузки рекомендую использовать SELECT ... INTO OUTFILE и LOAD DATA INFILE будет в разы быстрее, чем по 1 записи ковырять
Да вы попробуйте список значений поменьше. Если план изменится - надо делать серию запросов. Или просто выражение force index. Ведь у вас там индексы в possible_keys перечислены, то есть в принципе могли бы быть использованы, но оптимизатор выбрал полное сканирование.
И кстати, есть интересные варианты скрещивания sphinx и mysql - отдельный storage engine для mysql, который фактически позволяет в одном sql-запросе объединять данные из sphinx и mysql. Но это больше для удобства.