Die Arbeit mit großen Datenmengen in 1C ist eine Herausforderung, der sich früher oder später jeder Entwickler stellen muss. Eine Abfrage, die in der Testdatenbank sofort ausgeführt wird, kann in der Produktion Minuten dauern. Lassen Sie uns typische Fehler analysieren und lernen, wie man sie vermeidet.

Fehler Nr. 1: Verwendung von ÄHNLICH anstelle von genauen Bedingungen.
Viele unerfahrene Entwickler missbrauchen den LIKE-Operator, besonders wenn sie etwas in einer Zeichenfolge finden müssen.
Schlecht:
Номенклатура.Наименование ПОДОБНО "%Bolt%"Gut:
Номенклатура.Артикул = "12345"Der LIKE-Operator veranlasst das DBMS, die gesamte Tabelle zu scannen und Indizes zu ignorieren. Wenn es möglich ist, eine genaue Übereinstimmung oder den Anfang einer Zeile zu verwenden, tun Sie dies. Wenn eine Teilzeichensuche unvermeidlich ist, vermeiden Sie zumindest eine Maske mit einem Prozentzeichen am Anfang.
Fehler Nr. 2: Erhalt unnötiger Felder.
Ein klassischer Anfängerfehler besteht darin, alle Felder auszuwählen, auch wenn nur zwei oder drei benötigt werden.
Schlecht:
ВЫБРАТЬ
*
ИЗ
Справочник.КонтрагентыGut:
ВЫБРАТЬ
Контрагенты.Ссылка,
Контрагенты.Наименование,
Контрагенты.ИНН
ИЗ
Справочник.КонтрагентыDas Auswählen unnötiger Daten erhöht die Netzwerk- und Speicherlast. Dies ist besonders kritisch für Felder vom Typ SpeicherWerte - sie können Megabytes an Daten enthalten.
Fehler Nr. 3: Fehlen von Indizes in den Auswahlbedingungen.
Wenn Sie Daten häufig nach einem bestimmten Feld filtern, aber vergessen haben, einen Index dafür zu erstellen, bereiten Sie sich auf eine langsame Arbeit vor.
Überprüfen Sie, welche Felder Sie in den Bedingungen WHERE und JOIN verwenden. Für diese Felder müssen Indizes angelegt werden. Im Konfigurator geschieht dies über die Eigenschaften des Attributs, indem das Flag "Indexieren" gesetzt wird.
Wichtig: Indizieren Sie nur das, was in Abfragen tatsächlich verwendet wird. Übermäßige Indizes verlangsamen die Schreibvorgänge.
Fehler Nr. 4: Verschachtelte Abfragen statt Verbindungen.
Manchmal versuchen Entwickler, verwandte Daten über verschachtelte SELECT-Abfragen abzurufen.
Schlecht:
ВЫБРАТЬ
Документы.Номер,
(ВЫБРАТЬ Контрагенты.Наименование
ИЗ Справочник.Контрагенты КАК Контрагенты
ГДЕ Контрагенты.Ссылка = Документы.Контрагент)Gut:
ВЫБРАТЬ
Документы.Номер,
Контрагенты.Наименование
ИЗ
Документ.РеализацияТоваров КАК Документы
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО Документы.Контрагент = Контрагенты.СсылкаFür jede Zeile des Ergebnisses werden verschachtelte Abfragen ausgeführt. Verbindungen werden vom DBMS-Optimierer viel effizienter verarbeitet.
Fehler Nr. 5: Virtuelle Tabellen ignorieren.
1C bietet leistungsstarke virtuelle Tabellen für die Arbeit mit Resten, Umsätzen und anderen Datenschnitten. Viele Anfänger versuchen, dies manuell zu berechnen.
Schlecht: Selbstständige Berechnung der Salden durch Dokumentenumlauf
Gut:
ВЫБРАТЬ
Остатки.Номенклатура,
Остатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиVirtuelle Tabellen wurden bereits von Plattformentwicklern optimiert und verwenden spezielle Caching-Mechanismen.
Fehler Nr. 6: Keine Begrenzung der Anzahl der Einträge.
Wenn Sie Daten in ein Formular eingeben, begrenzen Sie immer die Anzahl der Einträge.
ВЫБРАТЬ ПЕРВЫЕ 1000
// AnfragefelderDies ist besonders wichtig für Berichte und Listen. Der Benutzer muss selten 100.000 Zeilen gleichzeitig sehen, aber die Leistung leidet stark darunter.
Fehler Nr. 7: Komplexe Ausdrücke in Bedingungen.
Wenn Sie Funktionen auf Felder in WHERE-Bedingungen anwenden, werden keine Indizes verwendet.
Schlecht:
ГДЕ ГОД(Документ.Дата) = 2024Gut:
ГДЕ Документ.Дата МЕЖДУ &НачалоПериода И &КонецПериодаDie Parameter des Zeitraums werden einmal auf der Clientseite berechnet, und die Abfrage selbst kann den Index nach Datum verwenden.
Fehler Nr. 8: Mehrere Datenbankaufrufe in einer Schleife.
Dies ist ein klassisches N+1-Problem, bei dem Sie zuerst eine Liste von Elementen erhalten und dann in einer Schleife für jedes Element eine zusätzliche Abfrage durchführen.
Schlecht:
// Wir erhalten eine Liste von Dokumenten
Для Каждого Документ Из Выборка Цикл
// Für jedes Dokument - eine neue Anfrage an die Datenbank
Контрагент = ПолучитьКонтрагента(Документ);
КонецЦикла;Gut: alles in einer Abfrage mit Verbindungen kombinieren oder temporäre Tabellen verwenden.

Praktische Tipps zur Optimierung.
Verwenden Sie temporäre Tabellen.
Wenn die Abfrage komplex ist und die Zwischendaten mehrmals verwendet werden, können temporäre Tabellen die Ausführung erheblich beschleunigen.
Analysieren Sie die Abfragepläne.
Aktivieren Sie im Unternehmensmodus die Abfragekonsole und untersuchen Sie, welche Indizes verwendet werden und welche nicht.
Denken Sie an das Caching.
Einige Daten können auf der Client-Seite zwischengespeichert werden, um die Datenbank nicht jedes Mal zu belasten.
Verwenden Sie Batch-Operationen.
Anstatt viele kleine Einträge zu machen, machen Sie eine große Transaktion.
Wie misst man die Leistung?
Messen Sie die Ausführungszeit von Abfragen unter Kampfbedingungen mit realen Datenmengen. Was bei 100 Datensätzen schnell funktioniert, kann bei 100.000 Datensätzen verlangsamen.
Verwenden Sie das 1C-Protokoll, um nach langsamen Abfragen zu suchen. Konfigurieren Sie es so, dass Abfragen aufgezeichnet werden, die länger als eine bestimmte Zeit dauern (z. B. 1 Sekunde).
Schlussfolgerung.
Die Optimierung von Abfragen in 1C ist keine einmalige Aufgabe, sondern eine ständige Praxis. Beginnen Sie einfach: Geben Sie die erforderlichen Felder explizit an, verwenden Sie Indizes, vermeiden Sie ÄHNLICH und verschachtelte Abfragen. Diese Grundregeln führen bereits zu einer spürbaren Leistungssteigerung.
Denken Sie daran, dass es kein universelles Rezept gibt. Jeder Fall erfordert eine Analyse und ein Verständnis dafür, wie Ihre Anfrage funktioniert und was verbessert werden kann.
Möchten Sie Ihre Programmierkenntnisse verbessern?
In Kodike Hier finden Sie Kurse in Python, JavaScript, HTML, CSS und anderen gefragten Technologien für Entwickleranfänger. Lernen Sie in einem komfortablen Tempo und erstellen Sie echte Projekte!
Und wir haben auch einen coolen Telegram-Kanal mit einer freundlichen Community, in der wir über Programmierung diskutieren, Erfahrungen teilen und uns gegenseitig helfen, zu wachsen! Mach mit! 🚀
