sql - 为什么根本不使用由查询计划中的提示插入的新索引?
问题描述
简而言之:我创建了一个由查询计划中的提示推荐的新索引。但它在创建后不使用。为什么?
我使用 Microsoft SQL Server 14.0.3401.7。
我有一个简单的查询:
SELECT COUNT(*) FROM [viewAS0003_PJ0003] AS _tbl_
视图定义为
CREATE VIEW [dbo].[viewAS0003_PJ0003] AS
SELECT p.* FROM [tblAS0003_PJ0003] AS p
JOIN [tblAS0003] AS a ON a.[Id]=p.[IdAddress] WHERE p.[IdUserDelete] IS NULL AND a.[IdUserDelete] IS NULL
索引定义为:
CREATE INDEX [idxAS0003_000058] ON [dbo].[tblAS0003] ([IdUserDelete] ASC)
CREATE INDEX [idxAS0003_PJ0003_001002] ON [dbo].[tblAS0003_PJ0003] ([IdAddress] ASC) INCLUDE([IdUserDelete])
CREATE INDEX [idxAS0003_PJ0003_001021] ON [dbo].[tblAS0003_PJ0003] ([IdUserDelete] ASC)
查询计划显示:
<?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.481" Build="14.0.3401.7" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="140" StatementSubTreeCost="0.674259" StatementText="SELECT COUNT(*) FROM [viewAS0003_PJ0003] AS _tbl_" StatementType="SELECT" QueryHash="0x6C6609E0F75DADC3" QueryPlanHash="0x3E3661E36DB25D4C" 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="11" CompileCPU="11" CompileMemory="584">
<MissingIndexes>
<MissingIndexGroup Impact="34.0898">
<MissingIndex Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]">
<ColumnGroup Usage="EQUALITY">
<Column Name="[IdUserDelete]" ColumnId="42" />
</ColumnGroup>
<ColumnGroup Usage="INCLUDE">
<Column Name="[IdAddress]" ColumnId="2" />
</ColumnGroup>
</MissingIndex>
</MissingIndexGroup>
</MissingIndexes>
<MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
<OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="209715" EstimatedPagesCached="52428" EstimatedAvailableDegreeOfParallelism="2" MaxCompileMemory="2518336" />
<QueryTimeStats CpuTime="54" ElapsedTime="54" />
<RelOp AvgRowSize="11" EstimateCPU="0" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Compute Scalar" NodeId="0" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="0.674259">
<OutputList>
<ColumnReference Column="Expr1002" />
</OutputList>
<ComputeScalar>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1002" />
<ScalarOperator ScalarString="CONVERT_IMPLICIT(int,[Expr1005],0)">
<Convert DataType="int" Style="0" Implicit="true">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1005" />
</Identifier>
</ScalarOperator>
</Convert>
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="11" EstimateCPU="0.0176833" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Aggregate" NodeId="1" Parallel="false" PhysicalOp="Stream Aggregate" EstimatedTotalSubtreeCost="0.674259">
<OutputList>
<ColumnReference Column="Expr1005" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="54" ActualCPUms="54" />
</RunTimeInformation>
<StreamAggregate>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1005" />
<ScalarOperator ScalarString="Count(*)">
<Aggregate AggType="countstar" Distinct="false" />
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="9" EstimateCPU="0.230984" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="29471.3" LogicalOp="Inner Join" NodeId="2" Parallel="false" PhysicalOp="Merge Join" EstimatedTotalSubtreeCost="0.656576">
<OutputList />
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="48538" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="50" ActualCPUms="50" ActualScans="0" ActualLogicalReads="0" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<Merge ManyToMany="false">
<InnerSideJoinColumns>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</InnerSideJoinColumns>
<OuterSideJoinColumns>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</OuterSideJoinColumns>
<Residual>
<ScalarOperator ScalarString="[Grutzeck-AGVIP].[dbo].[tblAS0003_PJ0003].[IdAddress] as [p].[IdAddress]=[Grutzeck-AGVIP].[dbo].[tblAS0003].[Id] as [a].[Id]">
<Compare CompareOp="EQ">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Identifier>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</Identifier>
</ScalarOperator>
</Compare>
</ScalarOperator>
</Residual>
<RelOp AvgRowSize="11" EstimateCPU="0.0511395" EstimateIO="0.0925812" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="46347.8" EstimatedRowsRead="46347.8" LogicalOp="Index Seek" NodeId="3" Parallel="false" PhysicalOp="Index Seek" EstimatedTotalSubtreeCost="0.143721" TableCardinality="55572">
<OutputList>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="40628" ActualRowsRead="40628" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="12" ActualCPUms="12" ActualScans="1" ActualLogicalReads="103" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</DefinedValue>
</DefinedValues>
<Object Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Index="[idxAS0003_000058]" Alias="[a]" IndexKind="NonClustered" Storage="RowStore" />
<SeekPredicates>
<SeekPredicateNew>
<SeekKeys>
<Prefix ScanType="EQ">
<RangeColumns>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="IdUserDelete" />
</RangeColumns>
<RangeExpressions>
<ScalarOperator ScalarString="NULL">
<Const ConstValue="NULL" />
</ScalarOperator>
</RangeExpressions>
</Prefix>
</SeekKeys>
</SeekPredicateNew>
</SeekPredicates>
</IndexScan>
</RelOp>
<RelOp AvgRowSize="15" EstimateCPU="0.0656983" EstimateIO="0.187569" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="59574.7" EstimatedRowsRead="59583" LogicalOp="Index Scan" NodeId="4" Parallel="false" PhysicalOp="Index Scan" EstimatedTotalSubtreeCost="0.253268" TableCardinality="59583">
<OutputList>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="59335" ActualRowsRead="59583" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="21" ActualCPUms="20" ActualScans="1" ActualLogicalReads="252" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</DefinedValue>
</DefinedValues>
<Object Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Index="[idxAS0003_PJ0003_001002]" Alias="[p]" IndexKind="NonClustered" Storage="RowStore" />
<Predicate>
<ScalarOperator ScalarString="[Grutzeck-AGVIP].[dbo].[tblAS0003_PJ0003].[IdUserDelete] as [p].[IdUserDelete] IS NULL">
<Compare CompareOp="IS">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdUserDelete" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="NULL" />
</ScalarOperator>
</Compare>
</ScalarOperator>
</Predicate>
</IndexScan>
</RelOp>
</Merge>
</RelOp>
</StreamAggregate>
</RelOp>
</ComputeScalar>
</RelOp>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>
现在我创建新的所需索引。
CREATE INDEX idxTest ON [dbo].[tblAS0003_PJ0003] ([IdUserDelete]) INCLUDE ([IdAddress])
执行后:
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
我重复查询。现在查询计划显示如下:
<?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.481" Build="14.0.3401.7" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="1" StatementEstRows="1" StatementId="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="140" StatementSubTreeCost="0.673673" StatementText="SELECT COUNT(*) FROM [viewAS0003_PJ0003] AS _tbl_" StatementType="SELECT" QueryHash="0x6C6609E0F75DADC3" QueryPlanHash="0x3E3661E36DB25D4C" 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="40" CompileTime="16" CompileCPU="13" CompileMemory="584">
<MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
<OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="209715" EstimatedPagesCached="52428" EstimatedAvailableDegreeOfParallelism="2" MaxCompileMemory="2467808" />
<WaitStats>
<Wait WaitType="PAGEIOLATCH_SH" WaitTimeMs="2" WaitCount="3" />
<Wait WaitType="SOS_SCHEDULER_YIELD" WaitTimeMs="38" WaitCount="12" />
</WaitStats>
<QueryTimeStats CpuTime="54" ElapsedTime="94" />
<RelOp AvgRowSize="11" EstimateCPU="0" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Compute Scalar" NodeId="0" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="0.673673">
<OutputList>
<ColumnReference Column="Expr1002" />
</OutputList>
<ComputeScalar>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1002" />
<ScalarOperator ScalarString="CONVERT_IMPLICIT(int,[Expr1005],0)">
<Convert DataType="int" Style="0" Implicit="true">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1005" />
</Identifier>
</ScalarOperator>
</Convert>
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="11" EstimateCPU="0.0176121" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Aggregate" NodeId="1" Parallel="false" PhysicalOp="Stream Aggregate" EstimatedTotalSubtreeCost="0.673673">
<OutputList>
<ColumnReference Column="Expr1005" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="94" ActualCPUms="54" />
</RunTimeInformation>
<StreamAggregate>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1005" />
<ScalarOperator ScalarString="Count(*)">
<Aggregate AggType="countstar" Distinct="false" />
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="9" EstimateCPU="0.230469" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="29352.7" LogicalOp="Inner Join" NodeId="2" Parallel="false" PhysicalOp="Merge Join" EstimatedTotalSubtreeCost="0.65606">
<OutputList />
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="48538" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="90" ActualCPUms="50" ActualScans="0" ActualLogicalReads="0" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<Merge ManyToMany="false">
<InnerSideJoinColumns>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</InnerSideJoinColumns>
<OuterSideJoinColumns>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</OuterSideJoinColumns>
<Residual>
<ScalarOperator ScalarString="[Grutzeck-AGVIP].[dbo].[tblAS0003_PJ0003].[IdAddress] as [p].[IdAddress]=[Grutzeck-AGVIP].[dbo].[tblAS0003].[Id] as [a].[Id]">
<Compare CompareOp="EQ">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Identifier>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</Identifier>
</ScalarOperator>
</Compare>
</ScalarOperator>
</Residual>
<RelOp AvgRowSize="11" EstimateCPU="0.0511395" EstimateIO="0.0925812" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="46347.8" EstimatedRowsRead="46347.8" LogicalOp="Index Seek" NodeId="3" Parallel="false" PhysicalOp="Index Seek" EstimatedTotalSubtreeCost="0.143721" TableCardinality="55572">
<OutputList>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="40628" ActualRowsRead="40628" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="26" ActualCPUms="11" ActualScans="1" ActualLogicalReads="103" ActualPhysicalReads="1" ActualReadAheads="101" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="Id" />
</DefinedValue>
</DefinedValues>
<Object Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Index="[idxAS0003_000058]" Alias="[a]" IndexKind="NonClustered" Storage="RowStore" />
<SeekPredicates>
<SeekPredicateNew>
<SeekKeys>
<Prefix ScanType="EQ">
<RangeColumns>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003]" Alias="[a]" Column="IdUserDelete" />
</RangeColumns>
<RangeExpressions>
<ScalarOperator ScalarString="NULL">
<Const ConstValue="NULL" />
</ScalarOperator>
</RangeExpressions>
</Prefix>
</SeekKeys>
</SeekPredicateNew>
</SeekPredicates>
</IndexScan>
</RelOp>
<RelOp AvgRowSize="15" EstimateCPU="0.0656983" EstimateIO="0.187569" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="59335" EstimatedRowsRead="59583" LogicalOp="Index Scan" NodeId="4" Parallel="false" PhysicalOp="Index Scan" EstimatedTotalSubtreeCost="0.253268" TableCardinality="59583">
<OutputList>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="59335" ActualRowsRead="59583" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="48" ActualCPUms="22" ActualScans="1" ActualLogicalReads="252" ActualPhysicalReads="0" ActualReadAheads="249" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdAddress" />
</DefinedValue>
</DefinedValues>
<Object Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Index="[idxAS0003_PJ0003_001002]" Alias="[p]" IndexKind="NonClustered" Storage="RowStore" />
<Predicate>
<ScalarOperator ScalarString="[Grutzeck-AGVIP].[dbo].[tblAS0003_PJ0003].[IdUserDelete] as [p].[IdUserDelete] IS NULL">
<Compare CompareOp="IS">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[Grutzeck-AGVIP]" Schema="[dbo]" Table="[tblAS0003_PJ0003]" Alias="[p]" Column="IdUserDelete" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="NULL" />
</ScalarOperator>
</Compare>
</ScalarOperator>
</Predicate>
</IndexScan>
</RelOp>
</Merge>
</RelOp>
</StreamAggregate>
</RelOp>
</ComputeScalar>
</RelOp>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>
如您所见,根本没有使用新索引。执行计划没有改变。为什么?
解决方案
推荐阅读
- java - 取消选中 Payara5 中的“包装 JDBC 对象”会出错
- html - 无法在导航栏中向右浮动我的输入区域 - 为什么?
- javascript - 警报消息关闭按钮
- python-3.x - AttributeError:“连接”对象没有属性“setdefault”|| self.__connection_settings.setdefault("charset", "utf8")
- javascript - 预填充 WTForms 字段的当前值以对其进行编辑
- python-requests - 如何使用 RESTCONF 在路由器 Cisco-IOS-XE 中激活 OSPF?
- python - 参数 on_delete 的多个值
- sql - 错误:SQL 语句嵌套太深。在 SQL Server 中编译存储过程时
- typescript - TypeScript:提供可选参数的优雅方式?
- python - 无法让 tkinter 网格按我的意愿布局我的 GUI