Có bất kỳ hiệu suất nào tốt hơn khi truy vấn (đặc biệt) MySQL của những điều sau đây: Show
over:
Hoặc giữa cú pháp chỉ được thay thế bằng SQL thứ hai? Hỏi ngày 7 tháng 12 năm 2010 lúc 23:49Dec 7, 2010 at 23:49
Khi tôi nhớ lại, không có sự khác biệt. Nhưng hãy tự mình xem nếu:
and:
sản xuất các kế hoạch tương tự. Đã trả lời ngày 7 tháng 12 năm 2010 lúc 23:53Dec 7, 2010 at 23:53
tpditpditpdi 34.1K11 Huy hiệu vàng79 Huy hiệu bạc119 Huy hiệu đồng11 gold badges79 silver badges119 bronze badges Từ tài liệu:
Vì vậy, nó thực sự chỉ là đường cú pháp.
Đã trả lời ngày 7 tháng 12 năm 2010 lúc 23:51Dec 7, 2010 at 23:51
Paolo Bergantinopaolo BergantinoPaolo Bergantino 473K79 Huy hiệu vàng518 Huy hiệu bạc436 Huy hiệu Đồng79 gold badges518 silver badges436 bronze badges 5 hiển thị ý định rõ ràng hơn và đọc tốt hơn (điều mà SQL đặt ra để làm).Đã trả lời ngày 7 tháng 12 năm 2010 lúc 23:51Dec 7, 2010 at 23:51
Paolo Bergantinopaolo Bergantinoalex 473K79 Huy hiệu vàng518 Huy hiệu bạc436 Huy hiệu Đồng197 gold badges868 silver badges977 bronze badges 2 5 hiển thị ý định rõ ràng hơn và đọc tốt hơn (điều mà SQL đặt ra để làm).
Alexalex
Fa11enAngel 469K197 Huy hiệu vàng868 Huy hiệu bạc977 Huy hiệu Đồng2 gold badges37 silver badges35 bronze badges Ba câu sau đây sẽ tạo ra kết quả tương tự:Feb 21, 2017 at 22:24
Nhưng trong cấu hình 3 MySQL có thể (tùy thuộc vào các chỉ mục của bạn) sử dụng các chỉ mục khác nhau: vấn đề đặt hàng và bạn nên kiểm tra với Truy vấn giải thích để xem sự khác biệtgsouf 4.5602 Huy hiệu vàng37 Huy hiệu bạc35 Huy hiệu Đồng6 silver badges21 bronze badges Chúng ta có thể sử dụng giữa trong MySQL không? MySQL giữa toán tử giữa người vận hành chọn các giá trị trong một phạm vi đã cho. Các giá trị có thể là số, văn bản hoặc ngày. Các toán tử giữa được bao gồm: Giá trị bắt đầu và kết thúc được bao gồm. Tôi biết tôi đã nhẹ nhàng khi đăng blog trong năm nay. Họ luôn nói rằng cuộc sống có xu hướng cản trở các loại nhiệm vụ này, và năm nay điều đó chắc chắn là đúng. Dù sao, tôi muốn blog này không chỉ là sự ảo hóa máy chủ SQL với VMware vSphere, vì vậy tôi có ý định chi nhánh-không chỉ với nhiều trình ảo hóa hơn (Microsoft Hyper-V 2012 Mẹo và thủ thuật sắp ra mắt!) Mà còn muốn có một số niềm vui hơn Tidbits về Core SQL Server là tốt. & NBSP; Vì vậy, một vài ngày trước, một trong những khách hàng yêu thích của tôi đã thông qua một câu hỏi từ một trong những chuyên gia tư vấn khác của anh ấy. Câu hỏi là - Tại sao ‘lớn hơn so với và ít hơn so với’ nhanh hơn ’giữa các bộ lọc phạm vi trong các điều khoản ở đâu? Thật là một câu hỏi tuyệt vời! Hãy để thử nghiệm và xem những kết luận chúng ta có thể rút ra. 9Tôi sẽ kiểm tra với phạm vi ngày. 0Đầu tiên, hãy để tạo ra một container để kiểm tra. Chọn bất kỳ cơ sở dữ liệu ném nào và để bắt đầu! - Đặt ngày bắt đầu và ngày. Trong trường hợp này, chúng tôi đang sử dụng-tháng 10 năm 2006. Đặt @Date_From = '1900-01-01'; Đặt @Date_TO = '1999-12-31'; Trong khi (@i <100000) bắt đầu - Chọn ngày ngẫu nhiên. Chèn vào dbo.btw (dt) Chọn ( - hãy nhớ rằng, chúng tôi muốn thêm một số ngẫu nhiên vào ngày bắt đầu. Trong SQL, chúng tôi có thể thêm ngày (với tư cách là số nguyên) - vào một ngày để tăng ngày/giờ thực sự - Giá trị đối tượng. @date_from + (- Điều này sẽ buộc số ngẫu nhiên của chúng tôi là gte 0. Là nhị phân (8)) như int)) - số ngẫu nhiên của chúng tôi có thể rất lớn. Chúng tôi không thể có - vượt quá phạm vi ngày mà chúng tôi được đưa ra. - do đó, chúng tôi phải lấy mô đun của ngày - ngày chênh lệch phạm vi. Điều này sẽ cung cấp cho chúng tôi từ 0 đến mức và một ít so với phạm vi ngày. % - để có được số ngày trong phạm vi ngày, chúng tôi - có thể chỉ cần cơ chất vào ngày bắt đầu từ ngày kết thúc. Điểm này mặc dù, chúng ta phải đúc - đến int vì SQL sẽ không thực hiện bất kỳ chuyển đổi tự động nào - cho chúng tôi. Cast ((@date_to - @date_from) là int))) đặt @i = @i + 1 end end ĐƯỢC RỒI. Chạy khối một vài lần để có được một số lượng tốt trong bảng thử nghiệm của bạn. Đối với các số bên dưới, tôi đang chạy những thứ này trên phòng thí nghiệm nhà của mình với SQL Server 2008R2 và 736.000 bản ghi trong bảng này. Tôi sẽ chỉ gõ một số ngày ngẫu nhiên ra khỏi không khí mỏng và chúng ta đi. 1Chọn * từ DBO.BTW trong đó DT giữa '1945-01-08' và '1965-01-01' Chọn * từ dbo.btw trong đó dt> = '1945-01-08' và dt Chúng tôi thấy một số kết quả thú vị. 2 Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1483 & NBSP; MS. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. (147622 Hàng bị ảnh hưởng) Bảng 'BTW'. Quảng số 1, đọc logic 1252, đọc vật lý 0, đọc trước khi đọc 0, logic logic đọc 0, lob đọc vật lý 0, đọc loa đọc 0. Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1964 & NBSP; MS. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. Tôi có đầu ra giống hệt nhau ở đây cho mỗi truy vấn. & nbsp; Tôi đã chạy điều này hai mươi lần và nhận được kết quả tương đối giống nhau mỗi lần. Các kế hoạch thực thi truy vấn cũng giống hệt nhau. Di chuột qua quá trình quét chỉ mục phân cụm cho mỗi truy vấn. Họ giống hệt nhau. Nó thậm chí đã chuyển đổi giữa GTE và LTE cho bạn. Ngọt. Chúng trông giống hệt nhau. Vậy ... tại sao Runtimes luôn khác nhau? Điều gì sẽ xảy ra nếu chúng ta thay đổi thứ tự của các truy vấn? Điều gì về việc làm sạch bộ nhớ để đảm bảo chúng ta không có 'công cụ' nền tảng cản trở? (Đừng chạy các lệnh đó khi sản xuất!) 3 4 5 6Chọn * từ dbo.btw trong đó dt> = '1945-01-08' và dt Chúng tôi thấy một số kết quả thú vị. Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1483 & NBSP; MS. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. 7(147622 Hàng bị ảnh hưởng) Bảng 'BTW'. Quảng số 1, đọc logic 1252, đọc vật lý 0, đọc trước khi đọc 0, logic logic đọc 0, lob đọc vật lý 0, đọc loa đọc 0. Chọn * từ DBO.BTW trong đó DT giữa '1945-01-08' và '1965-01-01' Chọn * từ dbo.btw trong đó dt> = '1945-01-08' và dt Chúng tôi thấy một số kết quả thú vị. 8 Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1483 & NBSP; MS. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. (147622 Hàng bị ảnh hưởng) Bảng 'BTW'. Quảng số 1, đọc logic 1252, đọc vật lý 0, đọc trước khi đọc 0, logic logic đọc 0, lob đọc vật lý 0, đọc loa đọc 0. Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1483 & NBSP; MS. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. (147622 Hàng bị ảnh hưởng) Bảng 'BTW'. Quảng số 1, đọc logic 1252, đọc vật lý 0, đọc trước khi đọc 0, logic logic đọc 0, lob đọc vật lý 0, đọc loa đọc 0. Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1964 & NBSP; MS. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. Tôi có đầu ra giống hệt nhau ở đây cho mỗi truy vấn. & nbsp; Tôi đã chạy điều này hai mươi lần và nhận được kết quả tương đối giống nhau mỗi lần. Các kế hoạch thực thi truy vấn cũng giống hệt nhau. Di chuột qua quá trình quét chỉ mục phân cụm cho mỗi truy vấn. Họ giống hệt nhau. Nó thậm chí đã chuyển đổi giữa GTE và LTE cho bạn. Ngọt. 9Chúng trông giống hệt nhau. Vậy ... tại sao Runtimes luôn khác nhau? Điều gì sẽ xảy ra nếu chúng ta thay đổi thứ tự của các truy vấn? Điều gì về việc làm sạch bộ nhớ để đảm bảo chúng ta không có 'công cụ' nền tảng cản trở? (Đừng chạy các lệnh đó khi sản xuất!) Điều đó đã sửa chữa sự khác biệt trong Runtimes. Bây giờ chúng được đặt ra và các truy vấn đang thực hiện gần như giống hệt nhau. 8(147622 Hàng bị ảnh hưởng) Bảng 'BTW'. Quảng số 1, đọc logic 663, đọc vật lý 0, đọc trước khi đọc 0, logic logic đọc 0, lob đọc vật lý 0, đọc loa đọc 0. Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1280 ms. Thời gian thực hiện máy chủ SQL: Thời gian CPU = 0 ms, thời gian trôi qua = 5001 ms. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. (147622 Hàng bị ảnh hưởng) Bảng 'BTW'. Quảng số 1, đọc logic 663, đọc vật lý 0, đọc trước khi đọc 0, logic logic đọc 0, lob đọc vật lý 0, đọc loa đọc 0. Thời gian thực hiện SQL Server: CPU Time = 47 ms, Thời gian trôi qua = 1280 ms. Thời gian thực hiện máy chủ SQL: Thời gian CPU = 0 ms, thời gian trôi qua = 5001 ms. SQL Server Parse và biên dịch Thời gian: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. Thời gian thực hiện SQL Server: CPU Time = 16 ms, Thời gian trôi qua = 1127 ms. Thời gian thực hiện SQL Server: CPU Time = 0 ms, Thời gian trôi qua = 0 ms. 1Bây giờ, những kết quả này có kết luận về nơi tôi có thể tuyên bố một cách khách quan rằng cái này nhanh hơn so với kết quả kia không? Dĩ nhiên là không. Giữa chỉ là tốc ký cho GTE và LTE dù sao đi nữa. Thời gian thực hiện phải giống nhau, đưa ra hoặc lấy tiếng ồn nền trên máy chủ. Một điều cần lưu ý giữa giữa là làm thế nào bạn có thể nhận được một số dữ liệu được lọc sai nếu bạn không cẩn thận. Giữa về mặt kỹ thuật lớn hơn và bằng cộng với ít hơn và bằng. Nếu bạn đang sử dụng phạm vi ngày như các ví dụ ở trên, bộ lọc của bạn sẽ dịch thành: Có nghĩa là gì trong MySQL?Biểu tượng trong MySQL giống như không bằng toán tử (! =).Cả hai đều cho kết quả trong Boolean hoặc Tinyint (1).Nếu điều kiện trở thành đúng, thì kết quả sẽ là 1 nếu không 0. Trường hợp 1 - sử dụng! =not equal to operator (!=). Both gives the result in boolean or tinyint(1). If the condition becomes true, then the result will be 1 otherwise 0. Case 1 − Using !=
Cái nào tốt hơn và hoặc giữa trong SQL?Từ góc độ duy trì, giữa có lẽ là tốt hơn.BETWEEN is probably better.
Cái nào nhanh hơn giữa hoặc trong SQL?Giữa là nhanh hơn do so sánh ít hơn.Với mệnh đề, mỗi yếu tố được đi qua mỗi lần.Nhưng mục đích của cả hai là khác nhau: giữa được sử dụng khi bạn đang so sánh với phạm vi các giá trị theo một loại chuỗi nào đó.. With IN clause each elements are traversed every time. But purpose of both are different: Between is used when you are comparing with Range of values in some kind of sequence.
Chúng ta có thể sử dụng giữa trong MySQL không?MySQL giữa toán tử giữa người vận hành chọn các giá trị trong một phạm vi đã cho.Các giá trị có thể là số, văn bản hoặc ngày.Các toán tử giữa được bao gồm: Giá trị bắt đầu và kết thúc được bao gồm.The BETWEEN operator selects values within a given range. The values can be numbers, text, or dates. The BETWEEN operator is inclusive: begin and end values are included. |