select edges.*, nodes.*
from grids join edges on grids.edge=edges.id
join nodes on edges.startnode=nodes.id or edges.endnode=nodes.id
where grids.x>231 and grids.x<240 and grids.y>129 and grids.y<136edges和nodes的id是主键我给grids的edge,edges的startnode和endnode做了索引,但一点感觉也没有现在的数据量大约grids和edges各二十多万,nodes十多万应该怎么做索引好,或者sql该怎么改?我用的是SQLite,想想就这个版比较接近一点

解决方案 »

  1.   

    explain select edges.*, nodes.*
    from grids join edges on grids.edge=edges.id
    join nodes on edges.startnode=nodes.id or edges.endnode=nodes.id
    where grids.x>231 and grids.x<240 and grids.y>129 and grids.y<136贴出来看一下,另外再把show index from tablename 相关的表的索引情况也贴出来。
      

  2.   

    你这个没使用到索引 。 建了也白建grids 创建 (x,y,edge)和(y,x,edge) 创建索引select edges.*, nodes.*
    from (select  edge from grids where  x>231 and x<240 and y>129 and  y<136 ) as t 
     join edges on  t.edge=edges.id
             join nodes on edges.startnode=nodes.id or edges.endnode=nodes.id