表singer:
singerID,singerName
1,刘德华
2,张学友
3,郭富城
4,黎明表song:
songID,songName,singerID
1,忘情水,1
2,中国人,1
3,吻别,2
4,对你爱不完,3
5,今夜你会不会来,4我想查找刘德华的歌曲,有两种sql语句:
1.两表连接select song.songName
from song,singer
where song.singerID = singer.singerID
and singer.singerName = '刘德华'
2.嵌套select songName
from song
where singerID = (select singerID from singer where singerName = '刘德华')在数据量很大的情况是,是连接表更快还是嵌套更快?
谢谢!

解决方案 »

  1.   

    select songName
    from song a
    where exists (
    select 1 from singer where singerName = '刘德华'
    and singerID=a.singerID)
    这个快
      

  2.   

    select song.songName
    from song,singer
    where song.singerID = singer.singerID
    and singer.singerName = '刘德华'这个是最快的了,在大数据情况下比楼上的应该还要快点。
      

  3.   

    select songName
    from song
    where singerID = (select singerID from singer where singerName = '刘德华')嵌套更快
      

  4.   


    与select song.songName
    from song,singer
    where song.singerID = singer.singerID
    and singer.singerName = '刘德华',有区别吗
      

  5.   

    SET TIMING ON
    测试一下就清楚了哈!
      

  6.   

    嵌套的话,实际上是将第一个表的每一条记录与嵌套表中的记录进行扫描对比,所以如果两张表的数据都很大的情况下,这是一个循环比对的过程,需要的时间是很长的;
    而两表连接,是将两个表的数据笛卡尔之后再按连接条件进行过滤,所以在大数据量的时候,需要的时间也比较长,但相对嵌套来说,它更倾向于数据库底层的操作,所以需要的时间比嵌套应该要短,这个是经验的问题,不好说明,我觉得这样会不会更好一点:
    select song.songName
    from song,
    (select singerID from singer where singerName = '刘德华') singer
    where song.singerID = singer.singerID
      

  7.   

    select song.songName
    from song,singer
    where song.singerID = singer.singerID
    and singer.singerName = '刘德华'这种效率应该高一点
      

  8.   

    大数据量下是第一种   数据量小则差别不大
    一般情况下,能用表连接方式则不用exists;能用exists则不用in!