- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть таблица на 500Мб. В ней 2.500.000 записей. Выборка производится по ID (primary key). Движок MyISAM. Выбирается 50 строк запросом "SELECT id, url FROM tbl WHERE id in (4144, 5255, 6656, 9695, ...)".
Буфер для кешироваия ключей настроен (300Мб).
Запрос занимает более 1 секунды.
Выборка одиночной записи занимает в среднем 0.02
Подскажите, как можно ускорить выборку?
На всякий случай проверить - поле ID создает индексы ( хотя ПК уже по умолчанию создает их0 , а так запрос правильный
П.С, а так попробуйте добавить еще 1 поле - типа category_id и по нему выборку делать - должно быстрее работать
primari key - это уже индекс, как я понимаю. Другой индекс по этому полю строить по идеи не нужно.
По category_id не понял. Видимо, это не мой случай. Все записи в таблице относятся к одной категории, так сказать. Их нельзя разделить по какому-то признаку, облегчающему выборку.
1. Попробуйте запустить оптимизацию таблицы
2. Попробуйте в InnoBD перевести таблицу, если пользователей много
3. Если RAM много и в таблицу не нужно ничего добавлять или удалять, а только выборку. То сделайте таблицу типа MEMORY и закиньте туда копию таблицы. Тогда выборка будет практически моментальной
4. Проверьте включен ли вообще кэш запросов
создаете таблицу selections (select_id, session_id, ...) с уникальным индексом по (select_id, session_id)
далее
INSERT INTO selections (select_id, session_id) values (4144, xxx), (5255, xxx), (6656, xxx), (9695, xxx);
SELECT tbl.id, url FROM tbl, selections WHERE tbl.id = selections.select_id and selections.session_id = xxx;
DELETE from selections where session_id = xxx;
выглядит глупо, но будет быстрее, особенно если много in (..., ..., ) :D
Это бред :)
Тоже самое делает обычный кэш mysql. Зачем это воротить :)
kalim, Подключите к проекту SphinxSearch и забудьте о тормозах:)
SphinxSearch
для выборке по id?🙄
kalim, а что у вас за сервер?
Dinozavr, У меня AMD 2 x Opteron 4386 как минимум, меньшие процессоры не беру:)
Можно и по id Свинксу принципиальной разницы нет, у меня он трудиться в паре с Memcached :)
LEOnidUKG
1. Ok. попробую запустить и почитаю что это делает
2. Пользователь пока что один (запросы идет по одному). Но потом сделаю InnoDB
3. Не получится в MEMORY, есть поле BLOB с бинарными данными 90-150 байт. Но на RAM диске работало очень быстро (проект будет расти, в памяти держать не выйдет)
4. Кеш запросов не поможет. Каждый раз ID разные.
kxk
Про сфинкс почитаю. Хотя мне кажется это не мой случай. Тут не поиск, в просто выборка по ID.
kxk, сфинкс, солр и прочие эластики - это совсем другая опера. И кстати со сфинкса пора переезжать на ElasticSearch;)