|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
Дано: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
авторРезультат МолокоСметана & # x 2 0 ; ГвоздиМашины Вопрос: как бы при конвертации в строку избавиться от & # x 2 0 ; (разделено пробелами), что бы "печатался" пробел? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 14:47 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
replace сверху пустить ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 15:23 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
PaulWist, Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 16:29 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
Владислав Колосов PaulWist, Код: sql 1.
Ммм, запятые не нужны, потом их как выковыривать из конечной строки, как отличить "свою запятую" от "родной, что уже была" :) PS мысль я понял, что нужен "вменяемый" разделитель/символ, которого нет в исходной строке - не вариант, придётся клеить динамику. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 16:51 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
PaulWist Владислав Колосов PaulWist, Код: sql 1.
Ммм, запятые не нужны, потом их как выковыривать из конечной строки, как отличить "свою запятую" от "родной, что уже была" :) PS мысль я понял, что нужен "вменяемый" разделитель/символ, которого нет в исходной строке - не вариант, придётся клеить динамику. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 17:06 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
PaulWist, а для чего такие сложности, чтобы склеить строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 17:06 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
PaulWist Вопрос: как бы при конвертации в строку избавиться от & # x 2 0 ; (разделено пробелами), что бы "печатался" пробел? Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2021, 17:10 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
2 invm, aleks222 , Браво!!! (с меня очередное пиво) Малёк поправил код (изменил select cast ([Name] as nvarchar) на select [Name]), что бы избавиться от 3-х Warnings CONVERT_IMPLICIT Код: sql 1. 2. 3. 4.
тем не менее ещё осталось 2 Warnings Код: plsql 1. 2.
Вопрос: как бы от них избавиться? План не пристёгивается, странно, под спойлером. <?xml version="1.0" encoding="utf-16"?> <ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.518" Build="13.0.5888.11" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan"> <BatchSequence> <Batch> <Statements> <StmtSimple StatementCompId="2" StatementEstRows="1" StatementId="1" StatementOptmLevel="FULL" CardinalityEstimationModelVersion="130" StatementSubTreeCost="1.07997" StatementText="select t.x.value('.', 'nvarchar(max)') from (select [Name] from #test FOR XML PATH(''), type) t(x)" StatementType="SELECT" QueryHash="0x2C8D7B3CA978705D" QueryPlanHash="0x1B114A7BA88935AF" RetrievedFromCache="true" SecurityPolicyApplied="false"> <StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" /> <QueryPlan DegreeOfParallelism="1" CachedPlanSize="32" CompileTime="3" CompileCPU="3" CompileMemory="544"> <Warnings> <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(max),[Expr1027],0)" /> <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(max),[Expr1026],0)" /> </Warnings> <MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" /> <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="65536" EstimatedPagesCached="65536" EstimatedAvailableDegreeOfParallelism="8" MaxCompileMemory="6854936" /> <RelOp AvgRowSize="4035" EstimateCPU="1E-07" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Compute Scalar" NodeId="0" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="1.07997"> <OutputList> <ColumnReference Column="Expr1030" /> </OutputList> <ComputeScalar> <DefinedValues> <DefinedValue> <ColumnReference Column="Expr1030" /> <ScalarOperator ScalarString="[Expr1029]"> <Identifier> <ColumnReference Column="Expr1029" /> </Identifier> </ScalarOperator> </DefinedValue> </DefinedValues> <RelOp AvgRowSize="4035" EstimateCPU="4.18E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Inner Join" NodeId="1" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="1.07997"> <OutputList> <ColumnReference Column="Expr1029" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <NestedLoops Optimized="false"> <OuterReferences> <ColumnReference Column="Expr1003" /> </OuterReferences> <RelOp AvgRowSize="4035" EstimateCPU="1E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="UDX" NodeId="2" Parallel="false" PhysicalOp="UDX" EstimatedTotalSubtreeCost="0.0032885"> <OutputList> <ColumnReference Column="Expr1003" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <Extension UDXName="FOR XML"> <DefinedValues> <DefinedValue> <ColumnReference Column="Expr1003" /> </DefinedValue> </DefinedValues> <UsedUDXColumns> <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#test]" Column="Name" /> </UsedUDXColumns> <RelOp AvgRowSize="21" EstimateCPU="0.0001625" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="5" LogicalOp="Table Scan" NodeId="3" Parallel="false" PhysicalOp="Table Scan" EstimatedTotalSubtreeCost="0.0032875" TableCardinality="5"> <OutputList> <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#test]" Column="Name" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="5" ActualRowsRead="5" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualScans="1" ActualLogicalReads="1" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" /> </RunTimeInformation> <TableScan Ordered="false" ForcedIndex="false" ForceScan="false" NoExpandHint="false" Storage="RowStore"> <DefinedValues> <DefinedValue> <ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#test]" Column="Name" /> </DefinedValue> </DefinedValues> <Object Database="[tempdb]" Schema="[dbo]" Table="[#test]" IndexKind="Heap" Storage="RowStore" /> </TableScan> </RelOp> </Extension> </RelOp> <RelOp AvgRowSize="4035" EstimateCPU="0.0014405" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Aggregate" NodeId="4" Parallel="false" PhysicalOp="Stream Aggregate" EstimatedTotalSubtreeCost="1.07668"> <OutputList> <ColumnReference Column="Expr1029" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="0" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <StreamAggregate> <DefinedValues> <DefinedValue> <ColumnReference Column="Expr1029" /> <ScalarOperator ScalarString="MIN(CASE WHEN [Expr1003] IS NULL THEN NULL ELSE CASE WHEN datalength([Expr1026])>=(128) THEN CONVERT_IMPLICIT(nvarchar(max),[Expr1027],0) ELSE CONVERT_IMPLICIT(nvarchar(max),[Expr1026],0) END END)"> <Aggregate AggType="MIN" Distinct="false"> <ScalarOperator> <IF> <Condition> <ScalarOperator> <Compare CompareOp="IS"> <ScalarOperator> <Identifier> <ColumnReference Column="Expr1003" /> </Identifier> </ScalarOperator> <ScalarOperator> <Const ConstValue="NULL" /> </ScalarOperator> </Compare> </ScalarOperator> </Condition> <Then> <ScalarOperator> <Const ConstValue="NULL" /> </ScalarOperator> </Then> <Else> <ScalarOperator> <IF> <Condition> <ScalarOperator> <Compare CompareOp="GE"> <ScalarOperator> <Intrinsic FunctionName="datalength"> <ScalarOperator> <Identifier> <ColumnReference Column="Expr1026" /> </Identifier> </ScalarOperator> </Intrinsic> </ScalarOperator> <ScalarOperator> <Const ConstValue="(128)" /> </ScalarOperator> </Compare> </ScalarOperator> </Condition> <Then> <ScalarOperator> <Convert DataType="nvarchar(max)" Length="2147483647" Style="0" Implicit="true"> <ScalarOperator> <Identifier> <ColumnReference Column="Expr1027" /> </Identifier> </ScalarOperator> </Convert> </ScalarOperator> </Then> <Else> <ScalarOperator> <Convert DataType="nvarchar(max)" Length="2147483647" Style="0" Implicit="true"> <ScalarOperator> <Identifier> <ColumnReference Column="Expr1026" /> </Identifier> </ScalarOperator> </Convert> </ScalarOperator> </Else> </IF> </ScalarOperator> </Else> </IF> </ScalarOperator> </Aggregate> </ScalarOperator> </DefinedValue> </DefinedValues> <RelOp AvgRowSize="8045" EstimateCPU="0.0024" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="2400" LogicalOp="UDX" NodeId="5" Parallel="false" PhysicalOp="UDX" EstimatedTotalSubtreeCost="1.07524"> <OutputList> <ColumnReference Column="Expr1026" /> <ColumnReference Column="Expr1027" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <Extension UDXName="XQUERY DATA"> <DefinedValues> <DefinedValue> <ColumnReference Column="Expr1024" /> </DefinedValue> <DefinedValue> <ColumnReference Column="Expr1025" /> </DefinedValue> <DefinedValue> <ColumnReference Column="Expr1026" /> </DefinedValue> <DefinedValue> <ColumnReference Column="Expr1027" /> </DefinedValue> <DefinedValue> <ColumnReference Column="Expr1028" /> </DefinedValue> </DefinedValues> <UsedUDXColumns> <ColumnReference Table="[XML Reader]" Column="id" /> <ColumnReference Table="[XML Reader]" Column="nid" /> <ColumnReference Table="[XML Reader]" Column="tid" /> <ColumnReference Table="[XML Reader]" Column="value" /> <ColumnReference Table="[XML Reader]" Column="lvalue" /> <ColumnReference Table="[XML Reader]" Column="lvaluebin" /> <ColumnReference Column="Expr1020" /> <ColumnReference Table="[XML Reader]" Column="id" /> </UsedUDXColumns> <RelOp AvgRowSize="12983" EstimateCPU="0.0003" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="3000" LogicalOp="Compute Scalar" NodeId="6" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="1.07284"> <OutputList> <ColumnReference Column="Expr1020" /> <ColumnReference Table="[XML Reader]" Column="id" /> <ColumnReference Table="[XML Reader]" Column="nid" /> <ColumnReference Table="[XML Reader]" Column="tid" /> <ColumnReference Table="[XML Reader]" Column="value" /> <ColumnReference Table="[XML Reader]" Column="lvalue" /> <ColumnReference Table="[XML Reader]" Column="lvaluebin" /> </OutputList> <ComputeScalar> <DefinedValues> <DefinedValue> <ColumnReference Column="Expr1020" /> <ScalarOperator ScalarString="0x58"> <Const ConstValue="0x58" /> </ScalarOperator> </DefinedValue> </DefinedValues> <RelOp AvgRowSize="12531" EstimateCPU="0.01254" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="3000" LogicalOp="Inner Join" NodeId="7" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="1.07254"> <OutputList> <ColumnReference Table="[XML Reader]" Column="id" /> <ColumnReference Table="[XML Reader]" Column="nid" /> <ColumnReference Table="[XML Reader]" Column="tid" /> <ColumnReference Table="[XML Reader]" Column="value" /> <ColumnReference Table="[XML Reader]" Column="lvalue" /> <ColumnReference Table="[XML Reader]" Column="lvaluebin" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="11" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <NestedLoops Optimized="false"> <OuterReferences> <ColumnReference Column="Expr1004" /> </OuterReferences> <RelOp AvgRowSize="461" EstimateCPU="1.157E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Constant Scan" NodeId="8" Parallel="false" PhysicalOp="Constant Scan" EstimatedTotalSubtreeCost="1.157E-06"> <OutputList> <ColumnReference Column="Expr1004" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <ConstantScan> <Values> <Row> <ScalarOperator ScalarString="0x"> <Const ConstValue="0x" /> </ScalarOperator> </Row> </Values> </ConstantScan> </RelOp> <RelOp AvgRowSize="12531" EstimateCPU="1.06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="3000" LogicalOp="Table-valued function" NodeId="9" Parallel="false" PhysicalOp="Table-valued function" EstimatedTotalSubtreeCost="1.06"> <OutputList> <ColumnReference Table="[XML Reader]" Column="id" /> <ColumnReference Table="[XML Reader]" Column="nid" /> <ColumnReference Table="[XML Reader]" Column="tid" /> <ColumnReference Table="[XML Reader]" Column="value" /> <ColumnReference Table="[XML Reader]" Column="lvalue" /> <ColumnReference Table="[XML Reader]" Column="lvaluebin" /> </OutputList> <RunTimeInformation> <RunTimeCountersPerThread Thread="0" ActualRebinds="1" ActualRewinds="0" ActualRows="11" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" /> </RunTimeInformation> <TableValuedFunction> <DefinedValues> <DefinedValue> <ColumnReference Table="[XML Reader]" Column="id" /> </DefinedValue> <DefinedValue> <ColumnReference Table="[XML Reader]" Column="nid" /> </DefinedValue> <DefinedValue> <ColumnReference Table="[XML Reader]" Column="tid" /> </DefinedValue> <DefinedValue> <ColumnReference Table="[XML Reader]" Column="value" /> </DefinedValue> <DefinedValue> <ColumnReference Table="[XML Reader]" Column="lvalue" /> </DefinedValue> <DefinedValue> <ColumnReference Table="[XML Reader]" Column="lvaluebin" /> </DefinedValue> </DefinedValues> <Object Table="[XML Reader]" /> <ParameterList> <ScalarOperator ScalarString="[Expr1003]"> <Identifier> <ColumnReference Column="Expr1003" /> </Identifier> </ScalarOperator> <ScalarOperator ScalarString="(3)"> <Const ConstValue="(3)" /> </ScalarOperator> <ScalarOperator ScalarString="[Expr1004]"> <Identifier> <ColumnReference Column="Expr1004" /> </Identifier> </ScalarOperator> <ScalarOperator ScalarString="NULL"> <Const ConstValue="NULL" /> </ScalarOperator> </ParameterList> </TableValuedFunction> </RelOp> </NestedLoops> </RelOp> </ComputeScalar> </RelOp> </Extension> </RelOp> </StreamAggregate> </RelOp> </NestedLoops> </RelOp> </ComputeScalar> </RelOp> </QueryPlan> </StmtSimple> </Statements> </Batch> </BatchSequence> </ShowPlanXML> Владислав Колосова для чего такие сложности, чтобы склеить строки? Да. авторMicrosoft SQL Server 2016 (SP2-CU17) (KB5001092) - 13.0.5888.11 (X64) Mar 19 2021 19:41:38 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 08:47 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
PaulWist, "агрегатная CLR функция для сбора колонки в строку с разделителями" Вдруг пригодится. /* -- агрегатная CLR функция для сбора колонки в строку с разделителями create table #tt1(id int, nn varchar(10)) insert #tt1 values (1, 'qwe'),(1,'qwe'),(1,'dsa'),(2,'zxc'),(3,'tre'),(3,'tre1') select id, dbo.ConcatColumn(nn,' + ') from (select distinct * from #tt1) tt1 group by id */ using System; using Microsoft.SqlServer.Server; using System.Data.SqlTypes; using System.IO; using System.Text; [Serializable] [SqlUserDefinedAggregate( Format.UserDefined, //use clr serialization to serialize the intermediate result IsInvariantToNulls = true, //optimizer property IsInvariantToDuplicates = false, //optimizer property IsInvariantToOrder = false, //optimizer property MaxByteSize = 8000) //maximum size in bytes of persisted value ] public class ConcatColumn : IBinarySerialize { /// <summary> /// The variable that holds the intermediate result of the concatenation /// </summary> private StringBuilder intermediateResult; private string _delimiter; /// <summary> /// Initialize the internal data structures /// </summary> public void Init() { _delimiter = string.Empty; intermediateResult = new StringBuilder(); } /// <summary> /// Accumulate the next value, not if the value is null /// </summary> /// <param name="Value"></param> public void Accumulate(SqlString Value, SqlString Delimiter) { if (Value.IsNull) { return; } intermediateResult.Append(Value.Value); if (!Delimiter.IsNull & Delimiter.Value.Length > 0) { _delimiter = Delimiter.Value; /// save for Merge if (intermediateResult.Length > 0) intermediateResult.Append(Delimiter.Value); } } /// <summary> /// Merge the partially computed aggregate with this aggregate. /// </summary> /// <param name="other"></param> public void Merge(ConcatColumn other) { if (intermediateResult.Length > 0 & other.intermediateResult.Length > 0) intermediateResult.Append(_delimiter); intermediateResult.Append(other.intermediateResult); } /// <summary> /// Called at the end of aggregation, to return the results of the aggregation. /// </summary> /// <returns></returns> public SqlString Terminate() { string output = string.Empty; //delete the trailing comma, if any if (intermediateResult != null && intermediateResult.Length > 0) { output = intermediateResult.ToString(0, intermediateResult.Length - _delimiter.Length); } return new SqlString(output); } public void Read(BinaryReader r) { _delimiter = r.ReadString(); intermediateResult = new StringBuilder(r.ReadString()); } public void Write(BinaryWriter w) { w.Write(_delimiter); w.Write(this.intermediateResult.ToString()); } } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 13:06 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
Владислав Колосов PaulWist, "агрегатная CLR функция для сбора колонки в строку с разделителями" Вдруг пригодится. Если есть выбор: "встроенная или CLR" - от CLR следует шарахаться как чорт от ладана. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 13:52 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
так может пустая не нужна совсем, тогда еще проще Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 14:02 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
aleks222 Владислав Колосов PaulWist, "агрегатная CLR функция для сбора колонки в строку с разделителями" Вдруг пригодится. Если есть выбор: "встроенная или CLR" - от CLR следует шарахаться как чорт от ладана. Надо было еще палец к небу поднять. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 17:05 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
автор"агрегатная CLR функция для сбора колонки в строку с разделителями"Шта ? Можно же сделать обычную скалярную sql-функцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 18:09 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
L_argo Шта ? Можно же сделать обычную скалярную sql-функцию. Вы разницу между скалярной и агрегатной функцией знаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2021, 18:47 |
|
Убрать "мусор"
|
|||
---|---|---|---|
#18+
L_argo автор"агрегатная CLR функция для сбора колонки в строку с разделителями" Именно так поступило предыдущие "поколение кодо-писателей", а теперь оказалось, что ночь не такая уж долгая ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2021, 08:02 |
|
|
start [/forum/topic.php?fid=46&fpage=10&tid=1684112]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
9ms |
check topic access: |
9ms |
track hit: |
45ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
108ms |
get tp. blocked users: |
1ms |
others: | 8ms |
total: | 220ms |
0 / 0 |