PEPPLER.ORG
Michael Peppler
Sybase Consulting
Menu
Home
Sybase on Linux
Install Guide for Sybase on Linux
General Sybase Resources
General Perl Resources
Freeware
Sybperl
Sybase::Simple
DBD::Sybase
BCP Tool
Bug Tracker
Mailing List Archive
Downloads Directory
FAQs
Sybase on Linux FAQ
Sybperl FAQ
Personal
Michael Peppler's resume

sybperl-l Archive

Up    Prev    Next    

From: "Wechsler, Steven" <Steven dot Wechsler at mtvstaff dot com>
Subject: RE: Is there a performance advantage to using placeholders with Sybase?
Date: Jan 8 2008 3:01PM

Well, unfortunately, that wouldn't work with what I'm trying to do:

I am working on a script to recover whatever data I can on a table that
has "692" errors (similar to the "605" error, the bane of every Sybase
DBA) by querying the corrupt table based on explicit key values and
retrieving each row that I can. This can't be batched in SQL because
once that error hits the SQL batch is terminated, but in Perl I can take
action based on that error (try to retrieve the data from a different
server which has an older version of the table).


Steve Wechsler | steven.wechsler@mtvstaff.com
Sybase/SQL Server/MySQL Database Administrator
212-846-5683

MTV Networks


-----Original Message-----
From: Ed Avis [mailto:eda@waniasset.com] 
Sent: Tuesday, January 08, 2008 9:55 AM
To: Wechsler, Steven; michael.x.peppler@jpmchase.com;
sybperl-l@peppler.org
Subject: RE: Is there a performance advantage to using placeholders with
Sybase?

Steven Wechsler wrote:

>If not, although writing a stored proc beforehand isn't 
>practical, what I'm doing is simple enough that I could 
>generate a stored proc on the fly, use do() repeatedly and 
>then drop it at the end. Presumably that would be better than 
>continual $dbh->do("insert table_x (select * from table_y 
>where ...)") - right?

Another thing you could try is rephrasing what you want to do as a
single query.  Even if you have to first construct a temporary table
with the values you need it may still work out faster, and if you have a
lot of values then you could bcp them in to a staging table.

As a very noddy example to explain what I mean, you could turn

    insert into x (select * from y where a = 1)
    go
    insert into x (select * from y where a = 2)
    go
    insert into x (select * from y where a = 3)
    go

into something like

    create table #staging (a int not null)
    insert into #staging values (1)
    insert into #staging values (2)
    insert into #staging values (3)
    insert into x (select y.* from y join staging on y.a = staging.a)
    go