- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 SQL:
IF EXISTS
(
LỰA CHỌN
1
FROM
SomeTable T1
WHERE
SomeField = 1
AND SomeOtherField = 1
AND NOT EXISTS(SELECT 1 FROM SomeOtherTable T2 WHERE T2.KeyField = T1.KeyField)
)
RAISERROR ('Blech.', 16, 1)
SomeTable
表大约有 200,000 行,SomeOtherTable
表大约有 200,000 行。
如果我执行内部 SQL(LỰA CHỌN
),它会在亚秒内执行,不会返回任何行。但是,如果我执行整个脚本 (IF...RAISERROR
),则需要一个多小时。 Tại sao?
现在,显然执行计划有所不同 - 我可以在企业管理器中看到这一点 - 但再说一次,Tại sao?
我可能可以做类似 SELECT @num = COUNT(*) WHERE
...然后 IF @num > 0 RAISERROR
但是...我认为那是有点没有捕获重点。如果您知道错误存在,您只能围绕错误进行编码(对我来说它确实看起来像错误)。
biên tập:
我应该提到,我已经尝试按照 @Bohemian 的答案将查询重新调整为 OUTER JOIN,但这对执行时间没有影响。
<小时>小时>Sửa đổi 2:
我已附上内部 LỰA CHỌN
语句的查询计划:
...以及整个 IF...RAISERROR
block 的查询计划:
显然,这些显示了真实的表/字段名称,但除此之外,查询与上面所示完全相同。
1 Câu trả lời
IF
不会神奇地关闭优化或破坏计划。优化器刚刚注意到 EXISTS
最多只需要一行(如 ĐẦU TRANG 1
)。这称为“行目标”,通常在您进行分页时发生。但也有 EXISTS
,TRONG
,NOT IN
等。
我的猜测:如果您将 ĐẦU TRANG 1
写入原始查询,您会得到相同(错误)的计划。
优化器在这里尝试变得聪明,只使用更便宜的操作生成第一行。不幸的是,它错误地估计了基数。它猜测查询将产生大量行,尽管实际上它不会产生任何行。如果它估计正确,您只会得到一个更有效的计划,否则它根本不会进行转换。
我建议采取以下步骤:
IF (SELECT COUNT(*) FROM ...) > 0
这将给出原始计划,因为优化器没有行目标.
关于sql - 为什么 IF(查询)需要一个多小时,而查询只需要不到一秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15634733/
Tôi có bộ dữ liệu cho 0 giờ, 3 giờ, 12 giờ, 24 giờ, 48 giờ... và tôi muốn biểu đồ dữ liệu này sao cho tỷ lệ thời gian được bảo toàn. chạy <- c(1:25) giờ <- as.factor(c(0, 3
Ví dụ, nếu tôi chọn thời gian: 3 giờ chiều và giờ: 5 giờ, tôi sẽ nhận được (8 giờ tối) là câu trả lời" Câu trả lời hay nhất let calendar = Calendar.current let date = calendar
Tôi có một biểu mẫu với hai trường ngày giờ. Người dùng nhập ngày (yyyy-mm-dd) và thời gian (3 ô; giờ, phút, sáng/chiều). Vì một lý do nào đó, ngày đầu tiên không được lưu theo định dạng 24 giờ. Dữ liệu sau đây là kết quả đầu vào: 2011
Tôi đã cố gắng thực hiện các phép tính bằng cách sử dụng các đơn vị phái sinh nhưng cho đến nay tôi vẫn chưa đạt được kết quả gì. Tôi đã thử mathjs nhưng nếu tôi nhập 1 giờ * 1 dặm/giờ thì tôi nhận được UnsupportedTypeError: Fu
Tôi có hai bộ cronjob mà tôi muốn chạy. Lần đầu tiên sẽ chạy sau mỗi 3 giờ, lần thứ hai cũng sẽ chạy sau mỗi 3 giờ, nhưng chậm hơn lần đầu tiên một giờ. Cú pháp đúng là gì? // cứ 3 giờ 17 */3 * *
Tôi biết rằng các phiên bản được đặt trước trong AWS liên quan nhiều hơn đến việc thanh toán hơn là các phiên bản thực tế - chúng không được gắn với các phiên bản thực tế - và tôi muốn biết: nếu tôi mua một phiên bản được đặt trước cho một thời điểm cụ thể ở một khu vực và vùng khả dụng cụ thể - nếu tôi sử dụng một phiên bản duy nhất 24 giờ một ngày so với chạy 24
Tôi đã thử: seq( from=as.POSIXct("2012-1-1 0", tz="UTC"), to=as.POSIXct("2012-1-3 23", tz="UTC"),
Tôi có một bảng có cột 'Ngày'. Tôi muốn nhóm một ngày cụ thể theo giờ. Câu trả lời hay nhất Chọn TO_CHAR(ngày,'HH24') từ bảng nơi ngày = TO_DATE('2011022
Tôi biết cách lấy ngày hiện tại trong SQL (SQL Server), nhưng để lấy ngày bắt đầu: select dateadd(DAY, datesiff(day, 0, getdate()),0) (res
Tôi đang cố gắng tạo bộ đếm thời gian giữa các trò chơi để sau khi người dùng mất một mạng, họ phải đợi 5 phút trước khi có thể chơi lại trò chơi. Nhưng tôi không chắc cách tốt nhất để thực hiện việc này là gì. Tôi cũng cần nó để ngăn người dùng chỉnh sửa thời gian của họ trong Cài đặt. Cách tốt nhất để đạt được điều này là gì?
Có gì đó không ổn với truy vấn của tôi. Lỗi cho biết mong đợi một hàm đã biết, nhận được 'HOUR'. Nếu tôi xóa phần này thì truy vấn sẽ hoạt động tốt (AND HOUR({$nowDate}) = 11) SELECT c FROM ProConvocati
var d1 = new Date(); var d2 = new Date(); d2.setHours(d1.getHours() +01); alert(d2); Phần này ổn. Bây giờ tôi cố gắng thêm
Tôi đang xây dựng một ứng dụng đồng hồ cơ bản để thực hành, nhưng vì lý do nào đó, thời gian không tự động thay đổi thành phút hoặc giờ mới nhất. Ví dụ, thời gian hiện tại là 17:56, nhưng ứng dụng lại hiển thị là 17:54, đây là lần cuối tôi mở ứng dụng. Ngày NSD *n
Tôi đã tạo một hình ảnh và muốn sử dụng nó làm hr cho một trang. Khi được tải lên, nó sẽ được căn chỉnh hoàn toàn sang bên trái. Tôi muốn nó được căn giữa bên dưới tiêu đề. Đây là mã CSS của tôi: .section-underline { height: 35px
Câu hỏi này đã có câu trả lời: Lấy sự khác biệt về giây giữa hai ngày trong JavaScript (2 câu trả lời) Đã đóng 4 năm trước. Tôi muốn tính hai số có số khác nhau
Tôi cần tính toán thời gian còn lại (ngày/giờ) cho đến ngày/giờ cụ thể. Tuy nhiên, tôi không sử dụng ngày tháng tĩnh. Giả sử tôi có một sự kiện vào lúc 17:00 Chủ Nhật hàng tuần. Tôi cần hiển thị thời gian còn lại cho đến sự kiện tiếp theo, diễn ra vào Chủ Nhật tuần này lúc 17:00. TÔI
Tôi đang thực thi tập lệnh này: SELECT EXTRACT(HOUR FROM TIMEDIFF('2009-12-12 13:13:13', NOW())); và tôi nhận được: -838. Đây là lúc MySQL có thể trích xuất
Sao chép mã Mã như sau: /** * Kiểm tra biểu thức chính quy cho giờ: phút
*
* @param pInput Chuỗi cần kiểm tra * @return boolean return
Ngay cả wifi 5 tệ/giờ, dẫn đầu xu hướng, anh đẹp trai quá, đêm nay em là của anh, Mười dặm đào hoa, nhà vệ sinh tùy chỉnh cao cấp cho phó chủ tịch, một con lợn nái già ở nhà buồn chán quá, mật khẩu wifi của bố em là gọi cho bố, đánh vần ra hết, chia tay Quan Hiểu Đồng và Lu Han, xoa bóp cho em
Tôi có cột khung dữ liệu sau: Tôi cần chuyển đổi dữ liệu chuỗi đối tượng trong cột csv thành tổng số giây. Ví dụ: 10 phút -> 600 giây Tôi đã thử mã này: df.duration = str(datetime.timedelta(df
Tôi là một lập trình viên xuất sắc, rất giỏi!