Sadly, they all seem to know that one but don't always think that it
applies to THEIR systems

On Fri, June 12, 2009 13:52, Michael Moore wrote:
> Lol! perhaps you need to familiarize them with the term GIGO.
>
> On Fri, Jun 12, 2009 at 9:45 AM, Rob Wolfe <wolfe....@gmail.com> wrote:
>
>>
>>
>>
>> On Jun 12, 11:20 am, Michael Moore <michaeljmo...@gmail.com> wrote:
>> > David makes good points. I personally don't like SELECT count(1) from
>> > MYTABLE; because it makes the meaning unclear.
>> > What does "1" have to do with what you are trying to achieve? Nothing.
>> Are
>> > you trying to count how many 1's are in your table? Of course not....
>> >
>> > read more »
>> >
>> > If "SELECT count(1)" means something, what does "SELECT count(2)"
>> mean?
>> How
>> > about SELECT count ('x')?
>> >
>> > By using 1 instead of *, all you have done is taken a well defined
>> operator
>> > '*' and replaced it with something that is obscure and confusing.
>> >
>> > Regards,
>> > Mike
>> >
>> >
>> >
>> > On Fri, Jun 12, 2009 at 6:10 AM, ddf <orat...@msn.com> wrote:
>> >
>> > > On Jun 12, 4:37 am, sonty <saurabh.zen...@gmail.com> wrote:
>> > > > I would say
>> >
>> > > > select count(1) from yourtablename;
>> >
>> > > > BR,
>> > > > Sonty
>> >
>> > > > On Jun 10, 9:15 pm, Michael Moore <michaeljmo...@gmail.com> wrote:
>> >
>> > > > > select count(*) from yourtablename;
>> >
>> > > > > regards,
>> > > > > Mike
>> >
>> > > > > On Wed, Jun 10, 2009 at 8:51 AM, Michael Lam <
>> > > michael.y....@hotmail.com>wrote:
>> >
>> > > > > > Hi all,
>> >
>> > > > > > I am kinda new to Oracle. So, really appreicate your help!
>> >
>> > > > > > I wonder what's the best way to retrieve the total number of
>> record
>> > > of
>> > > > > > a table. I googled it for a while and someone mentioned that
>> it
>> was
>> > > > > > discussed in google group before. Would you mind if you can
>> give
>> me
>> > > > > > direction regarding this please?
>> >
>> > > > > > thanks
>> > > > > > Michael- Hide quoted text -
>> >
>> > > > > - Show quoted text -- Hide quoted text -
>> >
>> > > > - Show quoted text -
>> >
>> > > Using count(1) is no better than using count(*):
>> >
>> > > SQL> select count(*)
>> > >  2  from dbaobjs;
>> >
>> > >  COUNT(*)
>> > > ----------
>> > >     69226
>> >
>> > > Execution Plan
>> > > ----------------------------------------------------------
>> > > Plan hash value: 708967174
>> >
>> > > ----------------------------------------------------------------------
>> > > | Id  | Operation          | Name    | Rows  | Cost (%CPU)| Time
>> |
>> > > ----------------------------------------------------------------------
>> > > |   0 | SELECT STATEMENT   |         |     1 |   286   (1)| 00:00:04
>> |
>> > > |   1 |  SORT AGGREGATE    |         |     1 |            |
>> |
>> > > |   2 |   TABLE ACCESS FULL| DBAOBJS | 69226 |   286   (1)| 00:00:04
>> |
>> > > ----------------------------------------------------------------------
>> >
>> > > Statistics
>> > > ----------------------------------------------------------
>> > >        287  recursive calls
>> > >          0  db block gets
>> > >       1067  consistent gets
>> > >       1024  physical reads
>> > >          0  redo size
>> > >        420  bytes sent via SQL*Net to client
>> > >        416  bytes received via SQL*Net from client
>> > >          2  SQL*Net roundtrips to/from client
>> > >          6  sorts (memory)
>> > >          0  sorts (disk)
>> > >          1  rows processed
>> >
>> > > SQL> alter system flush shared_pool;
>> >
>> > > System altered.
>> >
>> > > SQL> select count(1)
>> > >  2  from dbaobjs
>> > >  3  /
>> >
>> > >  COUNT(1)
>> > > ----------
>> > >     69226
>> >
>> > > Execution Plan
>> > > ----------------------------------------------------------
>> > > Plan hash value: 708967174
>> >
>> > > ----------------------------------------------------------------------
>> > > | Id  | Operation          | Name    | Rows  | Cost (%CPU)| Time
>> |
>> > > ----------------------------------------------------------------------
>> > > |   0 | SELECT STATEMENT   |         |     1 |   286   (1)| 00:00:04
>> |
>> > > |   1 |  SORT AGGREGATE    |         |     1 |            |
>> |
>> > > |   2 |   TABLE ACCESS FULL| DBAOBJS | 69226 |   286   (1)| 00:00:04
>> |
>> > > ----------------------------------------------------------------------
>> >
>> > > Statistics
>> > > ----------------------------------------------------------
>> > >        293  recursive calls
>> > >          0  db block gets
>> > >       1067  consistent gets
>> > >          0  physical reads
>> > >          0  redo size
>> > >        420  bytes sent via SQL*Net to client
>> > >        416  bytes received via SQL*Net from client
>> > >          2  SQL*Net roundtrips to/from client
>> > >          6  sorts (memory)
>> > >          0  sorts (disk)
>> > >          1  rows processed
>> >
>> > > SQL>
>> >
>> > > Yet another device, which is no more efficient, is to select the max
>> > > (rownum) from the desired table:
>> >
>> > > SQL> select max(rownum)
>> > >  2  from dbaobjs;
>> >
>> > > MAX(ROWNUM)
>> > > -----------
>> > >      69226
>> >
>> > > Execution Plan
>> > > ----------------------------------------------------------
>> > > Plan hash value: 4046134655
>> >
>> > > -----------------------------------------------------------------------
>> > > | Id  | Operation           | Name    | Rows  | Cost (%CPU)| Time
>> > > |
>> > > -----------------------------------------------------------------------
>> > > |   0 | SELECT STATEMENT    |         |     1 |   286   (1)|
>> 00:00:04
>> > > |
>> > > |   1 |  SORT AGGREGATE     |         |     1 |            |
>> > > |
>> > > |   2 |   COUNT             |         |       |            |
>> > > |
>> > > |   3 |    TABLE ACCESS FULL| DBAOBJS | 69226 |   286   (1)|
>> 00:00:04
>> > > |
>> > > -----------------------------------------------------------------------
>> >
>> > > Statistics
>> > > ----------------------------------------------------------
>> > >        293  recursive calls
>> > >          0  db block gets
>> > >       1067  consistent gets
>> > >          0  physical reads
>> > >          0  redo size
>> > >        423  bytes sent via SQL*Net to client
>> > >        416  bytes received via SQL*Net from client
>> > >          2  SQL*Net roundtrips to/from client
>> > >          6  sorts (memory)
>> > >          0  sorts (disk)
>> > >          1  rows processed
>> >
>> > > SQL>
>> >
>> > > Of course, if statistics are current and one doesn't mind a possibly
>> > > inexact number there is always the option of querying USER_TABLES
>> (but
>> > > in terms of recursive calls using count() is more efficient):
>> >
>> > > SQL> select table_name, num_rows
>> > >  2  from user_tables
>> > >  3  where table_name = 'DBAOBJS'
>> > >  4  /
>> >
>> > > TABLE_NAME                       NUM_ROWS
>> > > ------------------------------ ----------
>> > > DBAOBJS                             69226
>> >
>> > > Execution Plan
>> > > ----------------------------------------------------------
>> > > Plan hash value: 2777635855
>> >
>> > >
>> ---------------------------------------------------------------------------­---------------------------
>> > > | Id  | Operation                           | Name           | Rows
>> |
>> > > Bytes | Cost (%CPU)| Time     |
>> >
>> > >
>> ---------------------------------------------------------------------------­---------------------------
>> > > |   0 | SELECT STATEMENT                    |                |     1
>> > > |   131 |    10  (10)| 00:00:01 |
>> > > |   1 |  NESTED LOOPS OUTER                 |                |     1
>> > > |   131 |    10  (10)| 00:00:01 |
>> > > |   2 |   NESTED LOOPS OUTER                |                |     1
>> > > |   127 |     9  (12)| 00:00:01 |
>> > > |   3 |    NESTED LOOPS OUTER               |                |     1
>> > > |   119 |     8  (13)| 00:00:01 |
>> > > |   4 |     NESTED LOOPS OUTER              |                |     1
>> > > |   114 |     7  (15)| 00:00:01 |
>> > > |   5 |      NESTED LOOPS                   |                |     1
>> > > |   103 |     6  (17)| 00:00:01 |
>> > > |   6 |       NESTED LOOPS                  |                |     1
>> > > |   100 |     5  (20)| 00:00:01 |
>> > > |   7 |        MERGE JOIN CARTESIAN         |                |     1
>> > > |    67 |     4  (25)| 00:00:01 |
>> > > |*  8 |         HASH JOIN                   |                |     1
>> > > |    31 |     1 (100)| 00:00:01 |
>> > > |*  9 |          FIXED TABLE FULL           | X$KSPPI        |     1
>> > > |    27 |     0   (0)| 00:00:01 |
>> > > |  10 |          FIXED TABLE FULL           | X$KSPPCV       |  1915
>> > > |  7660 |     0   (0)| 00:00:01 |
>> > > |  11 |         BUFFER SORT                 |                |     1
>> > > |    36 |     4  (25)| 00:00:01 |
>> > > |* 12 |          TABLE ACCESS BY INDEX ROWID| OBJ$           |     1
>> > > |    36 |     3   (0)| 00:00:01 |
>> > > |* 13 |           INDEX RANGE SCAN          | I_OBJ2         |     1
>> > > |       |     2   (0)| 00:00:01 |
>> > > |* 14 |        TABLE ACCESS CLUSTER         | TAB$           |     1
>> > > |    33 |     1   (0)| 00:00:01 |
>> > > |* 15 |         INDEX UNIQUE SCAN           | I_OBJ#         |     1
>> > > |       |     0   (0)| 00:00:01 |
>> > > |  16 |       TABLE ACCESS CLUSTER          | TS$            |     1
>> > > |     3 |     1   (0)| 00:00:01 |
>> > > |* 17 |        INDEX UNIQUE SCAN            | I_TS#          |     1
>> > > |       |     0   (0)| 00:00:01 |
>> > > |  18 |      TABLE ACCESS CLUSTER           | SEG$           |     1
>> > > |    11 |     1   (0)| 00:00:01 |
>> > > |* 19 |       INDEX UNIQUE SCAN             | I_FILE#_BLOCK# |     1
>> > > |       |     0   (0)| 00:00:01 |
>> > > |* 20 |     INDEX RANGE SCAN                | I_OBJ1         |     1
>> > > |     5 |     1   (0)| 00:00:01 |
>> > > |* 21 |    INDEX RANGE SCAN                 | I_OBJ1         |     1
>> > > |     8 |     1   (0)| 00:00:01 |
>> > > |* 22 |   INDEX RANGE SCAN                  | I_USER2        |     1
>> > > |     4 |     1   (0)| 00:00:01 |
>> >
>> > >
>> ---------------------------------------------------------------------------­---------------------------
>> >
>> > > Predicate Information (identified by operation id):
>> > > ---------------------------------------------------
>> >
>> > >   8 - access("KSPPI"."INDX"="KSPPCV"."INDX")
>> > >   9 - filter("KSPPI"."KSPPINM"='_dml_monitoring_enabled')
>> > >  12 - filter(BITAND("O"."FLAGS",128)=0)
>> > >  13 - access("O"."OWNER#"=USERENV('SCHEMAID') AND
>> > > "O"."NAME"='DBAOBJS')
>> > >  14 - filter(BITAND("T"."PROPERTY",1)=0)
>> > >  15 - access("O"."OBJ#"="T"."OBJ#")
>> > >  17 - access("T"."TS#"="TS"."TS#")
>> > >  19 - access("T"."TS#"="S"."TS#"(+) AND "T"."FILE#"="S"."FILE#"(+)
>> > > AND
>> > >              "T"."BLOCK#"="S"."BLOCK#"(+))
>> > >  20 - access("T"."BOBJ#"="CO"."OBJ#"(+))
>> > >  21 - access("T"."DATAOBJ#"="CX"."OBJ#"(+))
>> > >  22 - access("CX"."OWNER#"="CU"."USER#"(+))
>> >
>> > > Statistics
>> > > ----------------------------------------------------------
>> > >        721  recursive calls
>> > >          0  db block gets
>> > >        220  consistent gets
>> > >          0  physical reads
>> > >          0  redo size
>> > >        488  bytes sent via SQL*Net to client- Hide quoted text -
>> >
>> > - Show quoted text -
>>
>> And this is precisely why I stopped being a DBA and went over to the
>> dark side (Business Intelligence). While i always found the internals
>> of the database utterly fascinating (and still do), I would often find
>> myself in a conversation with a developer that had managed to pick up
>> some bit of misinformation or an incredibly bad habit that kept
>> bringing a system to its knees and they would swear that the way they
>> were doing it was blessed by some well respected (by them) authority
>> even when the analysis of what the database was actually doing showed
>> the contrary.
>>
>> Now I just have to deal with the easy stuff... Like how to convince
>> VPs that if they let their people put crap in the ERP system then they
>> should be unsurprised that the dashboards look weird. And no, it isn't
>> really any easier, just a different kind of frustration and you can't
>> tell a VP that they have a suboptimal understanding of something
>> unless you get really lucky and find one that doesn't know what the
>> word suboptimal means.
>>
>> Rob
>> >
>>
>
> >
>



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to