SQL性能问题,求解

nile 发布于 2010/09/25 16:51
阅读 633
收藏 5

 

select count(*) from terminal_status t,
  (select 2 terminalType,
    bus.buscode as termid,
    decode((trim(y.YTCVERSION)), null, 0, 1) yctOnline,
    o.organname as orgName,
    o.organcode as orgCode,
    o.parentorgancode as parentOrgCode,
    bus.ROUTECODERUN routecode
    from runningbus bus, organ o, obuversionconfig y
    where bus.organcode = o.organcode             
    and bus.OBUID = y.OBUID) b
where t.term_id =  b.termid and t.term_type = 2

以上sql效率很低,但是删除了最后的一个条件

t.term_type = 2 就是ms级别,相当快不知道为何,求解。

表结构

CREATE TABLE TERMINAL_1.TERMINAL_STATUS
(
  TERM_ID             VARCHAR2(64 BYTE)         NOT NULL,
  TERM_TYPE           INTEGER,
  STATUS              INTEGER,
  OCCURTIME           DATE,
  CHANGE_STATUS_TIME  DATE,
  PARAMS              VARCHAR2(100 BYTE)
)

同样的一个表,把t.term_type = 2 条件换成其他字段,比如t.status = 2,同样很迅速。

加载中
0
红薯
红薯

term_type 字段做索引了?

0
shijacky
shijacky

数据量很大且TERM_TYPE无索引,在 TERM_TYPE上建索引吧

0
吴中兴

一般type之类的尽量不要做索引,重复的太多了,当索引数据比例达到一定程度,效率急剧下降。

0
nile
nile

关于索引的问题我也考虑过,TERM_TYPE   Status 两个字段都没有索引。

问题是把term_type=2加入条件,就慢,把Status=2加入条件,就是Ms级别了。


所以很是不理解。

0
mallon
mallon

在mysql上试过,如果是多个条件组合查询,那么这些条件相关的字段需要合起来作一个索引,速度才能上去。

0
G.
G.

做一个组合索引?

请问一下, SQL 语句有没有变化?

0
初级程序员
初级程序员

把这么多人 搞得这么纠结!LZ这也许只是你的幻觉而已~

0
G.
G.

引用来自#8楼“longzl”的帖子

把这么多人 搞得这么纠结!LZ这也许只是你的幻觉而已~

你错了, 影响数据库性能有很多方面, 大家是相互讨论, 不纠结, 也不是幻觉.

0
Lex.Chen
Lex.Chen

我是做Oracle开发调优的,不大熟悉MySQL的环境,但是个人首先想到的方法是看执行计划,新版的MySQL应该也是有执行计划的视图可供查看的,建议你把几种情况的执行计划找出来做一下比较,一般就会很清楚地知道问题所在了。建议你可以尝试一下,执行计划是分析性能问题的初级手段,但是对付小问题,足够了。

0
L
L.J

数据库不是很懂,只能围观吸收经验了。

返回顶部
顶部