таблица "wikilinks" имеет первичный индекс для "frompage" и "topage"
WHERE w2.topage=w1.frompage
Это условие не может быть найдено по составному индексу, описанному выше.
Либо измените порядок (создайте индекс на topage, frompage
), либо создайте дополнительный индекс на topage
.
P. S. Корень их проблемы в том, что ранги каждой и каждой страницы в системе обновляются при каждом редактировании.
Эта система ранжирования кажется мне несколько странной: она учитывает ссылки на ссылки, а не сами ссылки.
Если 1000 страниц ссылаются на Москва и только Москва ссылается на Бекет-пруд , то пруд получит 1000 очков и Москва вообще не получит очков, хотя все знают о Москве и о пруду.
Я думаю, это не то, что вы имели в виду. Скорее всего, это должно выглядеть так:
INSERT INTO
wikiscore
SELECT
linked.topage, COUNT(*) AS cnt
FROM wikilinks current, wikilinks linked
WHERE current.frompage=@current_page
AND linked.topage = current.topage
GROUP BY
linked.topage
ON DUPLICATE KEY UPDATE
score = cnt;
Суммирует все ссылки на все страницы, на которые ссылается текущая страница, и это, похоже, то, что вам нужно.
В этом случае вам нужно будет избавиться от score
в PRIMARY KEY
на wikiscore
, но я все равно не вижу смысла ставить его там.
Если вы хотите ускорить ранжирование запросов, вы создаете такие индексы:
ALTER TABLE wikilinks ADD CONSTRAINT pk_wikilinkes_fromto PRIMARY KEY (frompage, topage);
CREATE INDEX ix_wikilinks_topage ON wikilinks (topage);
ALTER TABLE wikiscore ADD CONSTRAINT pk_wikiscore_pagename PRIMARY KEY (pagename);
CREATE INDEX ix_wikiscore_score ON wikiscore (score);