liliugen 2012-01-06 11:31
浏览 216
已采纳

sql 性能优化,求教~~

我要写一个sql
select * from table1 where id in (1,2,3...)
括号里面的参数可能有几万个
有什么好一点的办法提高性能?

id随意

  • 写回答

6条回答 默认 最新

  • laopeng301 2012-01-06 12:00
    关注

    [code="java"]
    select * from table1 where id in (1,2,3...)
    括号里面的参数可能有几万个

    首先你这个需求的话
    你的in条件肯定不可能手输入进去。。

    放入表 关联
    select t1.* from table1 t1 INNER JOIN tableid t2
    on t1.id=t2.id

    select t1.* from table1 t1 where EXISTS (select t2.id fron tableid t2 where
    t2.id=t1.id
    )

    [/code]
    [code="sql"]
    執行策略
    1、在 FROM 子句中產生資料表的聯結。若使用明確的 JOIN 語法,則 JOIN 的結果就很明顯。如果 FROM 字句中含有多個以逗號分隔的資料表名稱,這就是資料表的隱含式跨產品聯結。

    2、若有 WHERE 子句,便對步驟 1 所得結果的資料列執行搜尋條件,只保留符合條件的資料列。

    3、如果 SELECT 子句中沒有任何彙總運算,而且如果沒有 GROUP BY 子句,則跳到步驟 7。

    4、如果有 GROUP BY 子句,則會將步驟 2 運算所得的資料列分為多個群組,因此所有群組資料行在每一個群組的所有資料列中具有相同的值。如果沒有 GROUP BY 子句,則將所有資料列放入一個群組中。

    5、若有指定 HAVING 子句,則針對步驟 4 所產生的每一個群組套用 HAVING 子句,只有符合 HAVING 子句的群組才會被保留。

    6、對於步驟 5 所產生的每一個群組,根據該群組評估來自 SELECT 子句中的選取清單,以便只產生一個結果資料列。

    7、若 SELECT 子句包含 DISTINCT 關鍵字,則在步驟 6 所得的結果中刪除重複的資料列。

    8、如果有 ORDER BY 子句,則根據其順序運算式所指定的方式排列步驟 7 的結果。
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥20 求自动化运维语料数据集
  • ¥30 广告检测流量作弊案例 IDEA运行代码报错 连接不上metastore 检测了环境配置没有问题 请求远程解决加VX问细节问题 不加的不回复
  • ¥15 matlab图像融合代码被嫌弃太简单,求改进。第一步改成直接读取三张图片,不读取文件夹
  • ¥20 微处理器原理与应用(私有偿)
  • ¥50 8051单片机关于ADC0809的应用
  • ¥15 有没有能拿来练练手写完发给我
  • ¥15 禁止修改windows系统时间
  • ¥50 kinect连接win11笔电导致音视频设备消失
  • ¥15 python线性查找题
  • ¥20 GDB info thread 显示格式问题