MySQL armazenando arestas de gráfico não direcionadas com eficiência

Desejo armazenar arestas de gráfico não direcionadas (por exemplo, para amigos). Para armazenar e recuperar todos os amigos do nóa, pode-se usar:

Crie duas linhas por borda, consulte uma coluna por nó:

+--------------------------+
| id | from_node | to_node |
+--------------------------+
| 1  |  a        |  b      |
| 2  |  b        |  a      |
+--------------------------+
SELECT * FROM `x` WHERE from_node = a

Crie uma linha por borda, useOR:

+--------------------------+
| id | node_a    | node_b  |
+--------------------------+
| 1  |  a        |  b      |
+--------------------------+
SELECT * FROM `y` WHERE node_a = a OR node_b = a

O que contribui para pesquisas mais eficientes?

Tabelax com2n linhas, índices emfrom_node eto_node, pesquisa em uma colunaTabelay comn linhas, índices emnode_a enode_b, procure nas duas colunas usandoOR

questionAnswers(2)

yourAnswerToTheQuestion