Таблица с более чем 12 миллионами строк, работающих с проблемами производительности - PullRequest
1 голос
/ 08 октября 2011

Теперь эта таблица с проблемами на самом деле является таблицей взаимосвязей для анализа ключевых слов веб-сайтов, где есть пять столбцов (keyword_id, website_id, occurrence, percentage, date)

Это позволяет получать статистику по ключевым словам для веб-сайта за определенный период времени и обеспечивает визуальное представление графика для владельца веб-сайта.

Теперь проблема в том, что мы в среднем индексируем около 57 уникальных ключевых слов для каждого сайта. И мы ежедневно индексируем около 12000 веб-сайтов, и это потому, что у нас уже есть проблемы с производительностью. Таким образом, вы получаете представление о том, что этот размер таблицы растет очень быстро.

Теперь у меня есть индекс для keyword_id, website id, occurrence, percentage и date). Таким образом, у каждого из них есть индекс, но у меня все еще есть проблемы с выборами.

Как бы вы решили эту проблему производительности на MySQL с PHP?

NOTE: The indexes are for each field and 1 for all of them combined as well.

SQL QUERY 1: SELECT * FROM table WHERE keyword_id = "323242"
SQL QUERY 2: SELECT * FROM table WHERE website_id = "232"
SQL QUERY 3: SELECT * FROM table WHERE keyword_id = "323242" ORDER by percentage
SQL QUERY 4: SELECT * FROM table WHERE website_id = "232" ORDER by occurence
SQL QUERY 5: SELECT * FROM table WHERE keyword_id = "323242" ORDER by occurrence
SQL QUERY 6: SELECT * FROM table WHERE website_id = "232" ORDER BY date

1 Ответ

4 голосов
/ 08 октября 2011

Каково распределение и вероятность ключевых слов?Например, если у вас есть ключевое слово, используемое каждым сайтом, каждый день после 6 месяцев, это 2,1 млн строк для одного ключевого слова.Я уверен, что это не так, но популярные слова становятся большими быстро.

Веб-сайт не должен быть слишком плохим, всего несколько тысяч строк.

Если вытолько выполняя запросы по ключевым словам и идентификатору веб-сайта, остальные индексы стоят вам времени и пространства (но не для чтения).

В идеале, процент по ключевому слову в процентах позволил бы оптимизатору возвращать довольно быстрый результат для вашего ключевого слова_идентификатора.отсортировано по процентному запросу, аналогично для остальных, но это может зависеть от структуры данных.

Сколько памяти на коробке и как быстро работают накопители?Я бы посмотрел на количество операций ввода-вывода в секунду, когда вы выполняете эти запросы.Вы легко можете просто перебивать свои накопители.

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

Кроме того, убедитесь, что у вас есть вся ваша статистика в актуальном состоянии.Плохая статистика убьет ваши запросы.

...