phpbar.de logo

Mailinglisten-Archive

Schnellere Queries
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Schnellere Queries



Hallo,

ich habe am NCI einen Online-Service entwickelt, der Teilmengen von
Anti-Krebs-Screening-Daten anhand verschiedener Kriteria erstellt.
http://cactus.nci.nih.gov/services/nscselect/
So kann man beispielsweise eine Suche nach allen Verbindungen in der
Datenbak durchführen, die Einträge für die Zell-Linien 1-6 enthalten.

Meine Methode funktioniert dabei folgendermaßen:

1.Schritt (sehr schnell, da die optimierte Haupttabelle (gi50) verwendet wird; Es werden alle NSCNr mit Einträgen für die Zellinie 1.01 ermittelt und in eine temporäre Tabelle geschrieben):
insert into tmp.tmp_seek1 select gi50.NSCNr from gi50 where CellID=1.01 group by NSCNr;

Ergebnis: ca. 32000 NSC-Numern werden in die tmp_seek1 Tabelle geschrieben

2.ter Schritt (langsam, da die Suche nun auch auf der temp. Tabelle durchgeführt wird. Alle NSCNr aus der ersten Anfrage werden daraufhin überprüft, ob sie auch Einträge für die Zell-Linie 1.02 in der Haupttabelle enthalten. Die NCSNr für die das zutrifft werden in eine zweite temporäre Teabelle geschrieben.):
insert into tmp.tmp_seek2 select gi50.NSCNr from gi50,tmp.tmp_seek1 where gi50.CellID=1.02 and
tmp.tmp_seek1.NSCNr=gi50.NSCNr group by NSCNr;

Die folgenden Suchen sind dann ähnlich zu Schritt 2, so daß man am Ende eine Teilmenge hat, die alle Kriterien erfüllt.

Die Benutzung der temporären Tabellen und die daraus resultierenden Datenbankanfragen sind für einen Webdienst einfach zu langsam; so dauert der 2.te Schritte über 2 Minuten. Welche Möglichkeiten gibt es, die Anfrage schneller zu machen.

Sind die folgenden Methoden geeigneter?

a) Alle NSCNr aus dem ersten Schritt zum AUfbau eines extrem langen Queries verwenden, wie:

insert into tmp.tmp_seek2 select gi50.NSCNr from gi50,tmp.tmp_seek1 where gi50.CellID=1.02 and
(NSCNr=1 or NSCNr=2 or NSCNr=3 ....<up to number 32000>..)  group by NSCNr;

b) Eine Schleife über alle 32000 NSCNr in TCL schreiben, wie

foreach nscnr $allnscsfromstep1 {
    dbase exec $dbhandle "insert into tmp.tmp_seek2 select $tblname.NSCNr from gi50 where CellID=1.02
and NSCNr=$nscnr group by NSCNr"
}

Irgendwelche Ratschläge ?

Frank

--
Institute of Organic Chemistry, University of Erlangen-Nuernberg
Naegelsbachstrasse 25, D-91052 Erlangen (Germany)
Tel (+49)-(0)9131-85-26579  Fax (+49)-(0)9131-85-26566
email: franko_(at)_chemie.uni-erlangen.de
WWW  : http://www2.ccc.uni-erlangen.de/oellien/
       http://www2.ccc.uni-erlangen.de/ChemVis/



---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive