SQL Server Compact查询运行约45分钟
现在我的把戏已经用光了SQL Server Compact查询运行约45分钟,sql,sql-server-ce,Sql,Sql Server Ce,现在我的把戏已经用光了 有人能告诉我我做错了什么吗?如果没有实际数据,我很难测试这段代码。。。但是试试这个: CREATE INDEX idxCustId ON tbl_customer(customer_id); 我基本上把内部连接放在第一位,并将WHERE子句作为连接的一部分。这只是几个技巧,你可以使用它来加速逻辑。这就成功了,但我不知道为什么这个是快的,而我的是慢的。如果你有时间的话,有什么解释吗?请看我在下面的编辑中的评论。简言之,您只是在更早地筛选数据,以使以后的工作“更少”。这可能
有人能告诉我我做错了什么吗?如果没有实际数据,我很难测试这段代码。。。但是试试这个:
CREATE INDEX idxCustId ON tbl_customer(customer_id);
我基本上把内部连接放在第一位,并将WHERE子句作为连接的一部分。这只是几个技巧,你可以使用它来加速逻辑。这就成功了,但我不知道为什么这个是快的,而我的是慢的。如果你有时间的话,有什么解释吗?请看我在下面的编辑中的评论。简言之,您只是在更早地筛选数据,以使以后的工作“更少”。这可能是因为witch语句中的顺序是过程。但它们的执行计划应该是相同的!我建议阅读我的猜测是,这个新的querry有一个新的执行计划,它不是缓存等,所以它修复了问题而没有修复它;在列上应用索引可以解决一个问题,但是如果您只是尝试应用索引失败,而不了解您的实际操作,那么最终可能弊大于利。您不仅需要查看表的设计,还需要查看该表的使用是如何实现的。索引应该像手术刀一样使用,而不是像猎枪一样使用。为了扩展现有的答案,我很抱歉地告诉大家,它们中没有一个接近答案。将发生查询计划缓存,两者很快将具有相同的性能。事实上,问题查询和答案查询之间没有区别(除了日期间隔的打开和关闭/范围是另一个主题)。“唯一的区别”是缓存的计划。对于
选择,其中可能具有相同的效果。关于sql的工作原理有一个深刻的误解。您好@rajeswan perumal,您应该尝试一个查询的解释计划,它应该让您对如何优化查询有更多的了解。欢迎来到这里,你的问题很好地阐述了。
CREATE INDEX idxCustId ON tbl_customer(customer_id);
SELECT tbl_sale.SALES_ID,
tbl_sale.Sales_Date,
tbl_sale.Sales_Time,
tbl_users.user_name,
tbl_sale.customer_id,
tbl_customer.customer_name,
tbl_sale.grand_disc,
tbl_sale.collection_full,
tbl_sale.term_of_payment,
tbl_sale.consin1,
tbl_sale.consin2,
tbl_sale.narration,
tbl_sale_details.item_id,
tbl_item.item_name,
tbl_sale_details.quantity,
tbl_sale_details.cost,
tbl_sale_details.price,
tbl_sale_details.vat,
tbl_sale_details.disc,
tbl_sale_details.total_cost,
tbl_sale_details.total_price,
tbl_sale_details.sub_total
FROM tbl_customer
INNER JOIN tbl_sale ON tbl_customer.customer_id = tbl_sale.customer_id
and tbl_sale.Sales_Date between '1/1/2018' and ' 08/22/2018'
INNER JOIN tbl_users ON tbl_sale.User_ID = tbl_users.User_ID
INNER JOIN tbl_sale_details ON tbl_sale.SALES_ID = tbl_sale_details.SALES_ID
LEFT OUTER JOIN tbl_item ON tbl_item.item_id = tbl_sale_details.item_id