Premiere commit - Omika
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# Lecture seule — timing des patterns SQL BATIK_TEST (OLE DB HFSQL)
|
||||
$ErrorActionPreference = "Stop"
|
||||
$connStr = "Provider=PCSoft.HFSQL;Data Source=127.0.0.1;Port=4900;Initial Catalog=BATIK_TEST;User ID=susana;Password=123;"
|
||||
|
||||
function TimeQuery($cn, $sql) {
|
||||
$sw = [System.Diagnostics.Stopwatch]::StartNew()
|
||||
$rs = New-Object -ComObject ADODB.Recordset
|
||||
$rs.Open($sql, $cn, 1, 1)
|
||||
$n = 0
|
||||
while (-not $rs.EOF) { $n++; $rs.MoveNext() }
|
||||
$rs.Close()
|
||||
$sw.Stop()
|
||||
return "$([math]::Round($sw.Elapsed.TotalSeconds,2))s rows=$n"
|
||||
}
|
||||
|
||||
$cn = New-Object -ComObject ADODB.Connection
|
||||
$cn.ConnectionTimeout = 15
|
||||
$cn.Open($connStr)
|
||||
Write-Host "CONNECTED"
|
||||
|
||||
# Full scans (reproduces the current bottleneck)
|
||||
Write-Host "--- FULL SCANS ---"
|
||||
Write-Host ("Intervention (25 cols) : " + (TimeQuery $cn "SELECT IN_PKID, IN_RefInterne, IN_IDClient, IN_IDLieu, IN_IDDossier, IN_IDTypeIntervention, IN_IDEtatIntervention, IN_Titre, IN_NumIntervention, IN_DateIntervention, IN_DureePrevue, IN_NumDevis, IN_NumFacture, Archive, IN_NoteInterne, IN_Description, IN_RefExterne, IN_IDSociete, IN_IDDemandeur, IN_IDSuiviPar, IN_IDImport, IN_AttestationTVAPresente FROM Intervention"))
|
||||
Write-Host ("Intervention_Personne (3 cols): " + (TimeQuery $cn "SELECT IP_PKID, IP_IDIntervention, IP_IDPersonne FROM Intervention_Personne"))
|
||||
Write-Host ("EtatIntervention (6 cols) : " + (TimeQuery $cn "SELECT EI_PKID, EI_IDEtat, EI_DateDebut, EI_DateFin, EI_Description, EI_IDIntervention FROM EtatIntervention"))
|
||||
Write-Host ("Personne (3 cols) : " + (TimeQuery $cn "SELECT PE_PKID, PE_Nom, PE_Prenom FROM Personne"))
|
||||
|
||||
# LIMIT pagination test
|
||||
Write-Host "--- LIMIT / TOP ---"
|
||||
Write-Host ("Intervention LIMIT 0,200 : " + (TimeQuery $cn "SELECT IN_PKID, IN_RefInterne, IN_Titre FROM Intervention ORDER BY IN_DateIntervention DESC LIMIT 0,200"))
|
||||
Write-Host ("Intervention TOP 200 : " + (TimeQuery $cn "SELECT TOP 200 IN_PKID, IN_RefInterne, IN_Titre FROM Intervention ORDER BY IN_DateIntervention DESC"))
|
||||
|
||||
# WHERE IN test (200 ids) on Intervention_Personne
|
||||
$rsIds = New-Object -ComObject ADODB.Recordset
|
||||
$rsIds.Open("SELECT IN_PKID FROM Intervention ORDER BY IN_DateIntervention DESC LIMIT 0,200", $cn, 1, 1)
|
||||
$list = New-Object System.Collections.Generic.List[string]
|
||||
while (-not $rsIds.EOF -and $list.Count -lt 200) { $list.Add([string]$rsIds.Fields.Item("IN_PKID").Value); $rsIds.MoveNext() }
|
||||
$rsIds.Close()
|
||||
$inClause = ($list -join ",")
|
||||
Write-Host "--- WHERE IN (200 intervention ids) ---"
|
||||
Write-Host ("Intervention_Personne WHERE IN : " + (TimeQuery $cn "SELECT IP_PKID, IP_IDIntervention, IP_IDPersonne FROM Intervention_Personne WHERE IP_IDIntervention IN ($inClause)"))
|
||||
Write-Host ("EtatIntervention WHERE IN : " + (TimeQuery $cn "SELECT EI_PKID, EI_IDEtat, EI_DateDebut, EI_DateFin, EI_Description, EI_IDIntervention FROM EtatIntervention WHERE EI_IDIntervention IN ($inClause)"))
|
||||
|
||||
$cn.Close()
|
||||
Write-Host "DONE"
|
||||
Reference in New Issue
Block a user