SELECT
*
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID ) AS CT,
NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID
FROM (
SELECT
NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID
FROM KOKMSTFX KOK
WHERE JIGYOBU_CD = 'SW'
AND RECODE_KUBUN <> 'D'
AND (USER_KUBUN = '00' OR (USER_KUBUN = '30' AND NEWUSER_KUBUN <> '00'))
AND (SELECT COUNT(JIGYOBU_CD)
FROM KOKMSTFX KOK1
WHERE JIGYOBU_CD = 'SW'
AND RECODE_KUBUN <> 'D'
AND (USER_KUBUN = '00' OR (USER_KUBUN = '30' AND NEWUSER_KUBUN <> '00'))
AND NAME_KANA = KOK.NAME_KANA
AND NAME_KANJI = KOK.NAME_KANJI ) > 1
)
ORDER BY NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID )
WHERE CT BETWEEN 1 AND 1000
以上这段SQL在50多万的表下面出结果需要1个多小时,是否SQL语句在哪方面写的不合理?
求高人赐教
*
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID ) AS CT,
NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID
FROM (
SELECT
NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID
FROM KOKMSTFX KOK
WHERE JIGYOBU_CD = 'SW'
AND RECODE_KUBUN <> 'D'
AND (USER_KUBUN = '00' OR (USER_KUBUN = '30' AND NEWUSER_KUBUN <> '00'))
AND (SELECT COUNT(JIGYOBU_CD)
FROM KOKMSTFX KOK1
WHERE JIGYOBU_CD = 'SW'
AND RECODE_KUBUN <> 'D'
AND (USER_KUBUN = '00' OR (USER_KUBUN = '30' AND NEWUSER_KUBUN <> '00'))
AND NAME_KANA = KOK.NAME_KANA
AND NAME_KANJI = KOK.NAME_KANJI ) > 1
)
ORDER BY NAME_KANJI,
NAME_KANA,
JIGYOBU_CD,
SHOP_CD,
TEL_H,
TEL_O,
TEL_MOBEL,
EMAIL,
KAIIN_NO ,
USER_KUBUN ,
UPDATE_DATE ,
KAIIN_ID )
WHERE CT BETWEEN 1 AND 1000
以上这段SQL在50多万的表下面出结果需要1个多小时,是否SQL语句在哪方面写的不合理?
求高人赐教
解决方案 »
- ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- 关于:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
- ps/sql 中写存储过程,有没有自动对齐快捷键?
- Oracle数据库存储过程分组问题
- 一条update的sql语句,大家帮忙看看
- cnoug网站好久不能打开了
- precise i3(veritas i3) 这个数据库监控软件有没有人使用过?
- 用SQL语句怎么写两个字段(operate_Date1,operate_date2都是8位的varchar2型)的差值小于30分钟
- 序列尚未在此进程中定义?100分求解答
- 游标?
- 求助,我是初学者,这个表的查询我怎么想都想不通,大家帮帮我,谢谢
- 我的这个触发器哪里有问题啊。。救命啊,,急啊 。。。。
2。WHERE的条件判断是从右往左的 所有把带‘=’的写在最右边 会快很多
3。尽量不要使用BETWEEN
4。大于或小于号 会破坏索引 所以不推荐使用
5。OR 也尽量不实用 以上的建议 完全有方法代替 请楼主 去参考一些东西 由于在公司 不方便帮您做修改 见谅!有疑问请加我QQ聊: 330589751 注明身份
那就按照要求,自己从新写个出来~