У меня есть эта таблица:комплекс MySQL запросов: сортировка и спаривание
itemA itemB relation
1 2 0.4
1 3 0.8
2 1 0.4
2 3 0.6
3 1 0.8
3 2 0.6
Это 10m строки таблицы и подсчета голосов, и, как вы видите, есть много дубликата информации. Я использую эту таблицу, как это:
SELECT itemB WHERE itemA=1 ORDER BY relation DESC LIMIT 1
// in this case - 3
Только в реальной жизни мой предел не 1, а 500, так что я получаю 500 пунктов, которые имеют наибольшее отношение «» значение с элементом я запрашиваю для.
Я рассматривающие сужая таблицы и удалить дубликаты:
itemA itemB relation
1 2 0.4
1 3 0.8
2 3 0.6
это позволит уменьшить размер таблицы на 50%. , но тогда мне нужен запрос, который выглядит примерно так:
«Ищите элемент x в itemA AND itemB, и когда вы его найдете, получите его пару. Когда у вас есть все пары, сортируйте их по их отношению к элементу x , и выберите верхнюю 500. "
A. Как вы думаете, это на самом деле сделает использование таблицы более эффективным?
B. Как должен выглядеть этот запрос?
Что вы имеете в виду получить "это пара"? Вы говорите о подходящей записи? Не можете ли вы сохранить граф для дубликатов? В противном случае вы можете захотеть [index] (http://stackoverflow.com/questions/1108/how-does-database-indexing-work) вашу базу данных для повышения скорости. –