Don Juan
Don Juan

Reputation: 155

Faster Query on my Firebird select procedure

Good day everyone, how to have a faster query on this specific select procedure? Is there any way to make it faster? my select procedure consist of 4 tables and 111 fields.

------ QUERY PERFORMANCE ------

Prepare : 16 ms

Execute : 16 ms

Avg fetch time: 0 ms

----------- MEMORY ------------

Current : 4.47 MB

Max : 4.48 MB

Buffers : 75

------ TABLE OPERATIONS -------

Table name : EMP_TABLE

Idx reads : 0

Non-idx reads : 8869

Updates : 0

Deletes : 0

Inserts : 0

Table name : POSITION_TABLE

Idx reads : 8868

Non-idx reads : 0

Updates : 0

Deletes : 0

Inserts : 0

Table name : SCHOOL_TABLE

Idx reads : 17734

Non-idx reads : 0

Updates : 0

Deletes : 0

Inserts : 0

    CREATE PROCEDURE EMP_TABLE_MAINLIST_COMPLETE
RETURNS(
  EMP_PK SMALLINT,
  EMP_SURNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_FIRSTNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_MIDDLENAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SUFFIXNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  FULLNAME VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  POSITION_PK SMALLINT,
  WHAT_POSITION VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  POSITION_SHORT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  POSITION_CLASS_REF SMALLINT,
  POSITION_CLASS VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  POSITION_SG SMALLINT,
  POSITION_INCRMNT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  POSITION_ANNUALSALARY DECIMAL(12, 2),
  POSITION_MNTHLYSLRY DECIMAL(12, 2),
  EMP_STATUS VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_FUNDSRC VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  SCHOOL_PK1 SMALLINT,
  SCHOOLASSGND_NAME VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  SCHOOLASSGND_DISTRICT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  SCHOOL_PK2 SMALLINT,
  SCHOOLPLNTLLA_NAME VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  SCHOOLPLNTLLA_DISTRICT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_LEVEL VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_MAJOR VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_TRACK VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_STRAND VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SUBJTTAUGHT VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_ORIGPLNTLANUM VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_ORIGAPPDAY SMALLINT,
  EMP_ORIGAPPMONTH SMALLINT,
  EMP_ORIGAPPYEAR SMALLINT,
  DATE_ORIGAPPNTMNT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PLNTLLANUM VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_APPDAY SMALLINT,
  EMP_APPMONTH SMALLINT,
  EMP_APPYEAR SMALLINT,
  DATE_APPNTMNT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_BDAY SMALLINT,
  EMP_BMONTH SMALLINT,
  EMP_BYEAR SMALLINT,
  DATE_BIRTH VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_BPLACE VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SEX VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_CIVILSTAT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_CTZNSHP VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RELIGION VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_ETHNICITY VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_HEIGHT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_WEIGHT VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_BLOOD VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_GSISID VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PAGIBIGID VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PHILHEALTH VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SSS VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RESDNTIALPROV VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RESDNTIALMUNCITY VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RESDNTIALBRGY VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RESDNTIALPRKSTRT VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  ADDRESSRESDNTIAL VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RESDNTIALZIPCODE VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_RESDNTIALTEL VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PERMNENTPROV VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PERMNENTMUNCITY VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PERMNENTBRGY VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PERMNENTPRKSTRT VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  ADDRESSPERMNENT VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PERMNENTZIPCODE VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_PERMNENTTEL VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_EMAILADD VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_CELLPHONE VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_AGENCYEMPNO VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_TIN VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSESURNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSEFIRSTNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSEMDDLNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSEOCCUPATION VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSEEMPLOYER VARCHAR(100) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSEBUSADD VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_SPOUSETELNO VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_FATHERSURNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_FATHERFIRSTNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_FATHERMIDDLENAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_MOTHERSURNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_MOTHERFIRSTNAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_MOTHERMIDDLENAME VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_CTCNO VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_CTCISSUEDAT VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_CTCISSUEDON DATE,
  EMP_36ACON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_36ARSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_36BCON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_36BRSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_37ACON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_37ARSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_37BCON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_37BRSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_38CON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_38RSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_39CON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_39RSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_40CON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_40RSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_41ACON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_41ARSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_41BCON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_41BRSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_41CCON VARCHAR(50) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_41CRSN VARCHAR(200) CHARACTER SET ISO8859_1 COLLATE ISO8859_1,
  EMP_DATEACC DATE,
  EMP_UPDATETIME TIMESTAMP)
AS
BEGIN
  FOR
    SELECT
      A.EMP_PK,
      A.EMP_SURNAME,
      A.EMP_FIRSTNAME,
      A.EMP_MIDDLENAME,
      A.EMP_SUFFIXNAME,
      A.EMP_SURNAME || ', ' || A.EMP_FIRSTNAME || ' ' || A.EMP_MIDDLENAME || ' '||A.EMP_SUFFIXNAME,
      A.POSITION_PK,
      D.POSITION_NAME,
      D.POSITION_SHORT,
      D.POSITION_CLASS_REF,
      D.POSITION_CLASS,
      D.POSITION_SG,
      D.POSITION_INCRMNT,
      D.POSITION_ANNUALSALARY,
      D.POSITION_MNTHLYSLRY,
      A.EMP_STATUS,
      A.EMP_FUNDSRC,
      A.SCHOOL_PK1, 
      B.SCHOOL_NAME,
      B.SCHOOL_DISTRICT,
      A.SCHOOL_PK2,
      C.SCHOOL_NAME,
      C.SCHOOL_DISTRICT,
      A.EMP_LEVEL,
      A.EMP_MAJOR,
      A.EMP_TRACK,
      A.EMP_STRAND,
      A.EMP_SUBJTTAUGHT,    
      A.EMP_ORIGPLNTLANUM,
      A.EMP_ORIGAPPDAY,
      A.EMP_ORIGAPPMONTH,
      A.EMP_ORIGAPPYEAR,
      A.EMP_ORIGAPPDAY || '/' || A.EMP_ORIGAPPMONTH || '/' || A.EMP_ORIGAPPYEAR,
      A.EMP_PLNTLLANUM,
      A.EMP_APPDAY,
      A.EMP_APPMONTH,
      A.EMP_APPYEAR,
      A.EMP_APPDAY || '/' || A.EMP_APPMONTH || '/' || A.EMP_APPYEAR,
      A.EMP_BDAY,
      A.EMP_BMONTH,
      A.EMP_BYEAR,
      A.EMP_BDAY || '/' || A.EMP_BMONTH || '/' || A.EMP_BYEAR,
      A.EMP_BPLACE,
      A.EMP_SEX,
      A.EMP_CIVILSTAT,
      A.EMP_CTZNSHP,
      A.EMP_RELIGION,
      A.EMP_ETHNICITY,
      A.EMP_HEIGHT,
      A.EMP_WEIGHT,
      A.EMP_BLOOD,
      A.EMP_GSISID,
      A.EMP_PAGIBIGID,
      A.EMP_PHILHEALTH,
      A.EMP_SSS,
      A.EMP_RESDNTIALPROV,
      A.EMP_RESDNTIALMUNCITY,
      A.EMP_RESDNTIALBRGY,
      A.EMP_RESDNTIALPRKSTRT,
      A.EMP_RESDNTIALPRKSTRT || ', ' || A.EMP_RESDNTIALBRGY || ', ' || A.EMP_RESDNTIALMUNCITY || ', ' || A.EMP_RESDNTIALPROV,
      A.EMP_RESDNTIALZIPCODE,
      A.EMP_RESDNTIALTEL,
      A.EMP_PERMNENTPROV,
      A.EMP_PERMNENTMUNCITY,
      A.EMP_PERMNENTBRGY,
      A.EMP_PERMNENTPRKSTRT,
      A.EMP_PERMNENTPRKSTRT || ', ' || A.EMP_PERMNENTBRGY || ', ' || A.EMP_PERMNENTMUNCITY || ', ' || A.EMP_PERMNENTPROV,
      A.EMP_PERMNENTZIPCODE,
      A.EMP_PERMNENTTEL,
      A.EMP_EMAILADD,
      A.EMP_CELLPHONE,
      A.EMP_AGENCYEMPNO,
      A.EMP_TIN,
      A.EMP_SPOUSESURNAME,
      A.EMP_SPOUSEFIRSTNAME,
      A.EMP_SPOUSEMDDLNAME,
      A.EMP_SPOUSEOCCUPATION,
      A.EMP_SPOUSEEMPLOYER,
      A.EMP_SPOUSEBUSADD,
      A.EMP_SPOUSETELNO,
      A.EMP_FATHERSURNAME,
      A.EMP_FATHERFIRSTNAME,
      A.EMP_FATHERMIDDLENAME,
      A.EMP_MOTHERSURNAME,
      A.EMP_MOTHERFIRSTNAME,
      A.EMP_MOTHERMIDDLENAME,
      A.EMP_CTCNO,
      A.EMP_CTCISSUEDAT,
      A.EMP_CTCISSUEDON,
      A.EMP_36ACON,
      A.EMP_36ARSN,
      A.EMP_36BCON,
      A.EMP_36BRSN,
      A.EMP_37ACON,
      A.EMP_37ARSN,
      A.EMP_37BCON,
      A.EMP_37BRSN,
      A.EMP_38CON,
      A.EMP_38RSN,
      A.EMP_39CON,
      A.EMP_39RSN,
      A.EMP_40CON,
      A.EMP_40RSN,
      A.EMP_41ACON,
      A.EMP_41ARSN,
      A.EMP_41BCON,
      A.EMP_41BRSN,
      A.EMP_41CCON,
      A.EMP_41CRSN,
      A.EMP_DATEACC,
      A.EMP_UPDATETIME

    FROM EMP_TABLE A, SCHOOL_TABLE B, SCHOOL_TABLE C, POSITION_TABLE D
    WHERE A.EMP_PK != 0 AND A.SCHOOL_PK1 = B.SCHOOL_PK AND A.SCHOOL_PK2 = C.SCHOOL_PK
    AND A.POSITION_PK = D.POSITION_PK 
    ORDER BY EMP_SURNAME || EMP_FIRSTNAME ASC
    INTO
      :EMP_PK,
      :EMP_SURNAME,
      :EMP_FIRSTNAME,
      :EMP_MIDDLENAME,
      :EMP_SUFFIXNAME,
      :FULLNAME,
      :POSITION_PK,
      :WHAT_POSITION,  
      :POSITION_SHORT, 
      :POSITION_CLASS_REF,
      :POSITION_CLASS,
      :POSITION_SG,
      :POSITION_INCRMNT,
      :POSITION_ANNUALSALARY,
      :POSITION_MNTHLYSLRY,
      :EMP_STATUS,
      :EMP_FUNDSRC,
      :SCHOOL_PK1,
      :SCHOOLASSGND_NAME,
      :SCHOOLASSGND_DISTRICT,
      :SCHOOL_PK2,
      :SCHOOLPLNTLLA_NAME,
      :SCHOOLPLNTLLA_DISTRICT,
      :EMP_LEVEL,
      :EMP_MAJOR,
      :EMP_TRACK,
      :EMP_STRAND,
      :EMP_SUBJTTAUGHT,
      :EMP_ORIGPLNTLANUM,
      :EMP_ORIGAPPDAY,
      :EMP_ORIGAPPMONTH,
      :EMP_ORIGAPPYEAR,
      :DATE_ORIGAPPNTMNT,
      :EMP_PLNTLLANUM,
      :EMP_APPDAY,
      :EMP_APPMONTH,
      :EMP_APPYEAR,
      :DATE_APPNTMNT,
      :EMP_BDAY,
      :EMP_BMONTH,
      :EMP_BYEAR,
      :DATE_BIRTH,
      :EMP_BPLACE,
      :EMP_SEX,
      :EMP_CIVILSTAT,
      :EMP_CTZNSHP,
      :EMP_RELIGION,
      :EMP_ETHNICITY,
      :EMP_HEIGHT,
      :EMP_WEIGHT,
      :EMP_BLOOD,
      :EMP_GSISID,
      :EMP_PAGIBIGID,
      :EMP_PHILHEALTH,
      :EMP_SSS,
      :EMP_RESDNTIALPROV,
      :EMP_RESDNTIALMUNCITY,
      :EMP_RESDNTIALBRGY,
      :EMP_RESDNTIALPRKSTRT,
      :ADDRESSRESDNTIAL,
      :EMP_RESDNTIALZIPCODE,
      :EMP_RESDNTIALTEL,
      :EMP_PERMNENTPROV,
      :EMP_PERMNENTMUNCITY,
      :EMP_PERMNENTBRGY,
      :EMP_PERMNENTPRKSTRT,
      :ADDRESSPERMNENT,
      :EMP_PERMNENTZIPCODE,
      :EMP_PERMNENTTEL,
      :EMP_EMAILADD,
      :EMP_CELLPHONE,
      :EMP_AGENCYEMPNO,
      :EMP_TIN,
      :EMP_SPOUSESURNAME,
      :EMP_SPOUSEFIRSTNAME,
      :EMP_SPOUSEMDDLNAME,
      :EMP_SPOUSEOCCUPATION,
      :EMP_SPOUSEEMPLOYER,
      :EMP_SPOUSEBUSADD,
      :EMP_SPOUSETELNO,
      :EMP_FATHERSURNAME,
      :EMP_FATHERFIRSTNAME,
      :EMP_FATHERMIDDLENAME,
      :EMP_MOTHERSURNAME,
      :EMP_MOTHERFIRSTNAME,
      :EMP_MOTHERMIDDLENAME,
      :EMP_CTCNO,
      :EMP_CTCISSUEDAT,
      :EMP_CTCISSUEDON,
      :EMP_36ACON,
      :EMP_36ARSN,
      :EMP_36BCON,
      :EMP_36BRSN,
      :EMP_37ACON,
      :EMP_37ARSN,
      :EMP_37BCON,
      :EMP_37BRSN,
      :EMP_38CON,
      :EMP_38RSN,
      :EMP_39CON,
      :EMP_39RSN,
      :EMP_40CON,
      :EMP_40RSN,
      :EMP_41ACON,
      :EMP_41ARSN,
      :EMP_41BCON,
      :EMP_41BRSN,
      :EMP_41CCON,
      :EMP_41CRSN,
      :EMP_DATEACC,
      :EMP_UPDATETIME
  DO
    BEGIN
      SUSPEND;
    END
END;

Upvotes: 0

Views: 367

Answers (1)

McMurphy
McMurphy

Reputation: 1264

Change

ORDER BY EMP_SURNAME || EMP_FIRSTNAME ASC

to

ORDER BY EMP_SURNAME ASC, EMP_FIRSTNAME ASC

And add an index EMP_SURNAME, EMP_FIRST_NAME, EMP_PK

It would save you a sort if nothing else.

But you don't seem to have and selection criteria except EMP_PK != 0 which seems of little use if it is the primary key?

EDIT

CREATE UNIQUE ASC INDEX EMP_NAME_IDX ON EMP_TABLE
(EMP_SURNAME,EMP_FIRST_NAME,EMP_PK)
;

See syntax here

Upvotes: 2

Related Questions