Какова максимальная длина URL апача?

Хорошо, я получил downvoted на этом так, я решил протестировать его:

CREATE TABLE userrole (
  userid INT,
  roleid INT,
  PRIMARY KEY (userid, roleid)
);

CREATE INDEX ON userrole (roleid);

Выполнение это:

\n";
mysql_connect('localhost', 'scratch', 'scratch');
if (mysql_error()) {
    echo "Connect error: " . mysql_error() . "\n";
}
mysql_select_db('scratch');
if (mysql_error()) {
    echo "Selct DB error: " . mysql_error() . "\n";
}

$users = 200000;
$count = 0;
for ($i=1; $i<=$users; $i++) {
    $roles = rand(1, 4);
    $available = range(1, 5);
    for ($j=0; $j<$roles; $j++) {
        $extract = array_splice($available, rand(0, sizeof($available)-1), 1);
        $id = $extract[0];
        query("INSERT INTO userrole (userid, roleid) VALUES ($i, $id)");
        $count++;
    }
}

$stop = microtime(true);
$duration = $stop - $start;
$insert = $duration / $count;

echo "$count users added.\n";
echo "Program ran for $duration seconds.\n";
echo "Insert time $insert seconds.\n";
echo "
\n"; function query($str) { mysql_query($str); if (mysql_error()) { echo "$str: " . mysql_error() . "\n"; } } ?>

Вывод:

499872 users added.
Program ran for 56.5513510704 seconds.
Insert time 0.000113131663847 seconds.

, Который добавляет 500 000 случайных комбинаций пользовательской роли и существуют приблизительно 25 000, которые соответствуют выбранным критериям.

Первый запрос:

SELECT userid
FROM userrole
WHERE roleid IN (1, 2, 3)
GROUP by userid
HAVING COUNT(1) = 3

Время запроса: 0.312 времени запроса s

SELECT t1.userid
FROM userrole t1
JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2
JOIN userrole t3 ON t2.userid = t3.userid AND t3.roleid = 3
AND t1.roleid = 1

: 0,016 s

Правильно. Версия соединения, которую я предложил, в двадцать раз быстрее, чем совокупная версия.

Жаль, но я делаю это для жизни и работы в реальном мире и в реальном мире, мы тестируем SQL, и результаты выступают за себя.

причина этого должна быть довольно ясной. Агрегатный запрос масштабируется в стоимости с размером таблицы. Каждая строка обработана, агрегирована и фильтрована (или не) через HAVING пункт. Версия соединения будет (использование индекса) выбирают подмножество пользователей на основе данной роли, затем проверяют что подмножество по второй роли и наконец что подмножество против третьей роли. Каждый выбор алгебра отношений условия) работает над все больше небольшим подмножеством. От этого можно завершить:

производительность версии соединения становится еще лучше с более низким падением соответствий.

, Если было только 500 пользователей (из 500k образца выше), который имел три установленных роли, версия соединения станет значительно быстрее. Совокупная версия не будет (и любое повышение производительности является результатом переноса 500 пользователей вместо 25k, который версия соединения, очевидно, получает также).

мне было также любопытно видеть, как реальная база данных (т.е. Oracle) будет иметь дело с этим. Таким образом, я в основном повторил то же осуществление на Oracle, XE (работающий на той же настольной машине Windows XP как MySQL от предыдущего примера) и результаты почти идентичен.

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

Обновление: приблизительно после обширное тестирование , изображение более сложно, и ответ будет зависеть от Ваших данных, Вашей базы данных и других факторов. Мораль истории является тестом, тестом, тестом.

59
задан Stef 17 August 2009 в 18:25
поделиться

3 ответа

Предел по умолчанию для длины строки запроса составляет 8190 байт (см. LimitRequestLine директива ). И если мы вычтем три байта для метода запроса (например, GET ), восемь байтов для информации о версии (например, HTTP / 1.0 / HTTP / 1.1 ) и два байта для разделительного пространства,

67
ответ дан 24 November 2019 в 18:26
поделиться
  • Internet Explorer: 2083 символа, при этом не более 2048 символов в части пути URL-адреса
  • Firefox: отображается 65 536 символов, но более длинные URL-адреса все равно работают даже после 100 000
  • Safari:> 80 000 символов
  • Opera:> 190 000 символов
  • IIS: 16 384 символа, но можно настроить
  • Apache: 4 000 символов

От: http://www.danrigsby.com /blog/index.php/2008/06/17/rest-and-max-url-size/[1231 impression

17
ответ дан 24 November 2019 в 18:26
поделиться

Официальная длина в соответствии с официальными документами Apache составляет 8 192, но многие люди столкнулись с проблемами на уровне ~ 4000.

В любом случае MS Internet Explorer обычно является ограничивающим фактором, поскольку он ограничивает максимальный размер URL - 2048.

6
ответ дан 24 November 2019 в 18:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: