Это довольно уродливый ответ, и я чувствую себя виноватым, говоря это. Тем не менее, это может помочь вам в вашей проблеме.
Одним из способов определения процентной доли будет подсчет всех строк и подсчет количества строк, превышающих указанное вами число. Вы можете рассчитать больше или меньше чем и принять обратное значение при необходимости.
Создайте индекс по вашему номеру.
итого = выберите количество ();
less_equal = выберите количество (), где значение> indexed_number;
Процент будет примерно таким: less_equal / total или (total - less_equal) / total
Убедитесь, что они оба используют индекс, который вы создали. Если они не, настройте их, пока они не будут. Запрос объяснения должен иметь «использующий индекс» в правом столбце. В случае счетчика выбора (*) следует использовать индекс для InnoDB и что-то вроде const для MyISAM. MyISAM будет знать это значение в любое время без необходимости его расчета.
Если вам нужно было сохранить процент в базе данных, вы можете использовать вышеуказанную настройку для повышения производительности, а затем рассчитать значение для каждой строки, используя второй запрос в качестве внутреннего выбора. Значение первого запроса может быть установлено как константа.
Помогает ли это?
Jacob