К сожалению, использование имени и преобразование его в уникальный идентификатор может занять больше времени, чем создание индекса для самого имени.
Вот что я рекомендую, исходя из ваших URL:
Добавить индекс к названию страницы
ALTER TABLE `mytable` ADD key indexname (columnname);
пример:
ALTER TABLE `page` ADD key pagename (name);
Теперь, поскольку структура отличается /candy
от /candy/chocolate
, я предполагаю, что у вас есть какая-то структура, такая как главная страница со списком (/ candy) и конкретным списком (/ candychocolate), поэтому в этом случае вы можете используйте это:
RewriteRule ^([a-z]+)/?$ index.php?category=$1&page=list [NC,L]
RewriteRule ^([a-z]+)/([a-z]+)/?$ index.php?category=$1&page=$2 [NC,L]
Затем вы можете просто запросить категорию и страницу, используя индексированное поле. Это будет быстро (конечно, не так быстро, как INT, но все еще быстро).
Для первого запроса вы можете сделать:
$name = addslahes($name);
SELECT fields FROM category WHERE category = '$name';
и когда вы получаете страницу, вы можете использовать:
$categoryname = addslahes($categoryname);
$pagename = addslahes($pagename);
SELECT fields FROM page LEFT JOIN category ON (page.categoryid = category.id) WHERE page = '$pagename' AND category = '$categoryname';
таким образом, используя как категорию, так и страницу, вы избежите страницы, не найденной (404).