Laden...
V
Viper78
myCSharp.de - Member
3
Themen
162
Beiträge
Ich liebe SQL 🙂
Letzte Aktivität
vor 11 Jahren
Dabei seit
06.05.2010
Herkunft
Dortmund
Interessen
THW
Erstellt vor 11 Jahren

HI,

totaler Unsinn die Logins zu entfernen.
Das sind ja nur Logins auf Benutzer in deiner Datenbank.

Sicherer wird die nicht da durch.
Wenn du mehr Hilfe willst schreib mal dein Ziel auf.

Erstellt vor 11 Jahren

verwendetes Datenbanksystem: <MS SQL 2010>

Morgen Leute,

ich möchte eine Prozedur erstellen, die mit für eine übergebene Tabelle den Maximalwert für ein Feld (ID) ausliest. Leider komme ich hier an meine Grenzen. Kann mir jemand weiterhelfen?
...

HI,

also es klingt danach das du den nächsten wert haben willst.
Wenn du ein Insert machst kann man einfach erfragen welche neue ID vergeben wurde: SELECT @@IDENTITY
Wenn du selber zählst solltest du dir ein Tabelle machen mit einer Row wo du dann beim Update in einer Transaktion eine Row Sperrung machst.

Bitte schreibe einfach noch genauer was du erreichen willst.

mfg
Björn

Erstellt vor 11 Jahren

Hi,

versuchs mal hiermit.


    public class Person
    {
        public Person()
        {
            Meeting = new Collection<Meeting>();
        }
        [Key]
        public int PersonID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public virtual ICollection<Meeting> Meeting { get; set; }
    }

    public class Meeting
    {
        [Key]
        public int MeetingID { get; set; }

        public int CustomerID { get; set; }
        [ForeignKey("CustomerID")]
        public virtual Person Customer { get; set; }

        public int SalesAgentID { get; set; }
        [ForeignKey("SalesAgentID")]
        public virtual Person SalesAgent { get; set; }
    }

MfG
Björn

Erstellt vor 11 Jahren

Huhu,

dieser Aussage

Zu erst die wenigst häufig wechselnden Spalten und zu letzt die am warscheinlichst häufigst unterschiedlichen Spalten.

muss ich leider auf das heftigste Wiedersprechen! Ein Index ist dann besonders wirksam, wenn das Filterkriterium möglichst weit vorne im Index steht. Bei mehreren Kirterien sollte das Kriterium mit der höchsten Frequenz vorne stehen. Dadurch wird beim Zugriff die Ergebnismenge schon durch den Filter auf das erste Feld erheblich eingschränkt!

Hi du hast recht es war genau anders rum. Sorry war gestern Spät.

...

Auch das hier

Wenn eins ein Full-Tablescan macht, must du optimieren.
stimmt nicht immer. Wenn Du alle oder fast alle Sätze einer Tabelle lesen willst ist der Relation Scan eben der beste Zugriff, den man nicht weite optimieren kann!
...

Ok man muss eben immer wissen was man tut. Deshalb ja auch meine allgemeines Fazit am Ende, dass es viele Wege gibt und kein alleiniges Lösungsmittel, wie z.B. nur eine Index anlegen reicht.

LG
Björn

Erstellt vor 11 Jahren

Hi,
gehe unter Server-Netzwerkkonfiguration.
Aktiviere TCP/IP und dann rechtsklick. (wie im Bild)
Ganz unten steht der Statische Netzwerkport. Dort 1433 eintragen und dann sollte es gehen.
Sonst werden nur Dynamische Ports unterstützt.

Erstellt vor 11 Jahren

Hi,

wieviele Millionen meinst du? Es ist schon entscheident.

@BerndFfm: Viele Indexe können auch das lesen langsammer machen, wenn der Optimizer den falschen Index wählt. Es ist wie immer das maß der Dinge. Nicht zu viel und nicht zu wenig.

@sindibad:
-SQLPLUS und dort mal EXPLAIN deiner SQL Statments eingeben. Wenn eins ein Full-Tablescan macht, must du optimieren.

  • FK kosten beim einfügen, etc. Performance.
  • Trigger kosten beim einfügen, etc. Performance.

Bei Oracle 8 brachte es performance eine Index nach der häufigkeit von unterschiedlichen werten anzulegen.
z.B.:
create index on Table XXX ON BOOLEAN, NUMBER, DATETIME
(Anhand des Datentypen veranschauliche ich die Möglichkeit von unterschiedlichen einträgen.)
Zu erst die wenigst häufig wechselnden Spalten und zu letzt die am warscheinlichst häufigst unterschiedlichen Spalten.

Manchmal muss man einfach eine Index anlegen nur für eine Spalte. Nur weil das Where über 2 Spalten geht muss der Index nicht über beide gehen. Das muss man messen und Teste.

Fremdschlüssel müssen immer Indiziert werden. Bei einem FK passiert das dann Automatisch. (Bin nicht 100% sicher ob das bei Oracle auch so ist.)

Optimieren kannst du auch indem du das Tablespace für Indexe auf ein Stripeset (Raid 0) legst.

Hast du Blobs in deiner Tabelle? Wenn ja bedeutet das immer ein Read wenn du die "Select * from tabelle" machst. Wenn du Blobs hast bitte immer die Abfragen ohne "*" machen wenn man den Blob nich benötigt., da es sonst immer ein I/O Read bedeutet und somit performance.

Eine umstellungen der SQL Statmens kann auch Geschwindigkeit bringen.

Z.B. Die Ergebnissmenge zu erst klein machen und dann Groupieren.

Ach es gibt einfach zu viele möglichkeiten eine Datenbank zu Optimieren um dir die passende zu liefern. Einfach mal ein gutes Buch lesen.

LG
Björn

Erstellt vor 12 Jahren

SQL: TRUNCATE TABLE [NAME_TABELLE]

Das sollte dir weiter helfen.

MfG

Erstellt vor 14 Jahren

Hi,

ich würde zu MSSQL greifen.
Enfach wegen der Volltextsuche.

Wenn du was mit Documenten machen willst, wirst du auch sicher deren Texte auslesen und speichern.
Eben um diese danach durch suchen zu können.

MfG
Björn

Erstellt vor 14 Jahren

hi,

du verwendest eine Procedur. Da gibt es kein RETURN.

Ausführen:

EXEC [dbo].[TestCase] @Text = N'173', @Laenge = 3

Procedur:


CREATE PROCEDURE [dbo].[TestCase] ( @Text NVARCHAR(50), @Laenge INT)
AS
DECLARE @EndErgebnis NVARCHAR(50)


DECLARE @Zahl INT
DECLARE @Ergebnis NVARCHAR(500)
DECLARE @Zeichen NCHAR(1)
DECLARE @retZeichen NVARCHAR(10)
SET @Zahl = 1
SET @Ergebnis = ''
SET @EndErgebnis = ''
SET @Zeichen = ''

WHILE (@Zahl <=@Laenge)
BEGIN

SET @Zeichen = SUBSTRING(@text, @Zahl, 1)

SELECT
@retZeichen = CASE
WHEN @Zeichen = N'0' THEN 'null'
WHEN @Zeichen = N'1' THEN 'eins'
WHEN @Zeichen = N'2' THEN 'zwei'
WHEN @Zeichen = N'3' THEN 'drei'
WHEN @Zeichen = N'4' THEN 'vier'
WHEN @Zeichen = N'5' THEN 'fünf'
WHEN @Zeichen = N'6' THEN 'sechs'
WHEN @Zeichen = N'7' THEN 'sieben'
WHEN @Zeichen = N'8' THEN 'acht'
WHEN @Zeichen = N'9' THEN 'neun'
ELSE
'blub'
END

IF len(@EndErgebnis) = 0
BEGIN
SET @EndErgebnis = @retZeichen
END
ELSE
BEGIN
SET @EndErgebnis = @EndErgebnis + '-' + @retZeichen
END


SET @Zahl = @Zahl + 1

END
SELECT @EndErgebnis as RetValue

GO


Du verarbeitest es wie ein SELECT in ADO.NET

MfG
Björn

Erstellt vor 14 Jahren

Witte hat genau das hat das beschrieben was ich dir als Beispiel geschrieben habe.

10 von 161 Beiträgen