SELECT * FROM gene_info_mouse  left join ipi_genes_mouse on gene_info_mouse.official_name =  ipi_genes_mouse.official_name
WHERE gene_info_mouse.official_name = 'vlcad' OR gene_info_mouse.gene_info_alias like '%|vlcad|%'

解决方案 »

  1.   

    为何这里用natural join后运行的速度很慢?
      

  2.   

    两个表上的official_name分别建索引再试试
      

  3.   

    贴出你的explain SELECT * FROM gene_info_mouse  left join ipi_genes_mouse on gene_info_mouse.official_name =  ipi_genes_mouse.official_name
    WHERE gene_info_mouse.official_name = 'vlcad' OR gene_info_mouse.gene_info_alias like '%|vlcad|%';show index from gene_info_mouse  ;
    show index from ipi_genes_mouse ;
      

  4.   

    其实就是,当用户输入一个ID的时候,可能是基因官方名,也可以是别名,所以就要在ipi_genes_mouse表的official_name 和 gene_info_alias中查找,如果找得到还要和ipi_genes_mouse表根据official_name列中相同的列中相同的official name值进行自然连接
    official name直接更加输入来查找,如果是别名,因为有多个,我在保存数据的时候用了在每个别名两边加|的方面进行了分割,所以可以用输入加上||分割 然后使用like来查找到唯一的值。其实,建立索引和我这个问题无关,原因是,我如果在另一个记录不是这里的老鼠的信息的人类的表中可以很快的找到,而且,我分开写这个查询,大家明白我的意思吗?我在ipi和gene_info表中找到我的相应值,都只有一个。人类的那个表和这个一样用的想同数据格式。
      

  5.   

    还有就是,现在我用
    SELECT * FROM gene_info_mouse  left join ipi_genes_mouse on ipi_genes_mouse.official_name = gene_info_mouse.official_name 
    WHERE gene_info_mouse.official_name = 'tp53' OR gene_info_mouse.gene_info_alias like '%|tp53|%'
    可以找到信息,
    但是,left join和natural join原理其实差不多。
    也无法解释在人类那张份表中能找到,这里找不到,
    见鬼了见鬼了
      

  6.   

    人类那个表明显要大于老鼠的表,但能在几毫秒级时间内疚得到结果问一个问题,natural join, where这中格式的语句,那个的优先级更高,是先进行连接然再where下吗?
      

  7.   

    我想应该是natuarl join要在where前执行,所以速度会很慢,不过还是不了解人类的表没有问题的原因,
    另外,我现在用查询嵌套来查找了,没有问题