2011-12-30 26 views
5

Chúng tôi dự định sử dụng các thủ tục được lưu trữ mysql để xử lý tất cả công việc cơ sở dữ liệu cho một dự án. Có một số ứng dụng (ngôn ngữ khác nhau) sử dụng cùng một cơ sở dữ liệu và tôi khá chắc chắn rằng có số lượng tốt đẹp của mã SQL lặp lại trên các ứng dụng đó.Làm thế nào/khi mysql biên dịch các thủ tục lưu sẵn?

Và sau đó khi đọc một cái gì đó về mysq tôi stumbled khi
http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
Điều cơ bản nói rằng thủ tục lưu trữ được biên dịch mỗi lần khi kết nối db mới được thực hiện.
Liệu mysql có biên dịch TẤT CẢ (ít nhất 3 chữ số) được lưu trữ trên cơ sở dữ liệu không?

+1

Tôi có thể nói rằng bài viết bạn đã liên kết trả lời câu hỏi của bạn. – hakre

+1

Vâng, tôi cũng sẽ nói thế. Nó chỉ là tôi đã có loại hy vọng rằng một cái gì đó như "Oh, thats không đúng cho ver 5.5 và sau đó của mysql". – grizwako

+0

Trong các bình luận của bài viết được liên kết của bạn, một cuộc thảo luận tiến hóa với bản chất, rằng mọi thứ đã được cải thiện trong 5,5 trong khi không blatantly để –

Trả lời

5

No. Quy trình truy vấn và lưu trữ được biên dịch theo yêu cầu và sau đó được lưu trong bộ nhớ cache trong một thời gian. Nếu bạn sử dụng một thủ tục được lưu trữ cụ thể nhiều lần thì phiên bản được biên dịch trong bộ nhớ cache sẽ được sử dụng, nhưng nếu nó không còn trong bộ đệm thì nó phải được biên dịch trước, giống như bất kỳ truy vấn nào khác bạn gửi tới cơ sở dữ liệu.

Những gì MySQL chắc chắn sẽ không làm là biên dịch tất cả x-trăm thủ tục được lưu trữ cùng một lúc - trong trường hợp đó là những gì bạn sợ.

Nhưng tất cả điều này phần nào không liên quan Lợi thế của các thủ tục được lưu trữ là bạn có thể đảm bảo rằng nhiều ứng dụng sử dụng cùng một cơ sở dữ liệu, sử dụng nó theo cùng một cách. Khi hiệu suất của bạn là như vậy mà bạn bắt đầu nhìn vào bộ nhớ cache biên dịch cho tốc độ, bạn đang tìm kiếm ở vị trí sai. Tối ưu hóa tốc độ được thực hiện tốt hơn thông qua việc thiết kế lại hoặc truy vấn cơ sở dữ liệu.

+0

Cơ sở dữ liệu cần phải được nhanh chóng blindingly. Sau khi bạn đã tối ưu hóa các truy vấn và thiết kế và chỉ mục cơ sở dữ liệu của mình, ** cách khác ** bạn có thể tối ưu hóa nó cho tốc độ không? – Pacerier

+0

Phần cứng nhanh hơn, lớn hơn trong bộ nhớ cache, ổ cứng nhanh hơn, các công cụ lưu trữ khác. Tất nhiên đây là sau khi bạn thêm các chỉ số để tăng tốc các truy vấn, vv ... Cũng cần lưu ý đến các khóa: khi nội dung của bảng được thay đổi mọi lúc, nó bị khóa cho mọi thay đổi, do đó giữ các truy vấn. Có một toàn bộ khoa học đằng sau điều này và nếu tôi là bạn tôi sẽ làm cho một câu hỏi mới và không thêm một bình luận cho một câu trả lời 4 tuổi vì có nhiều câu trả lời cho câu hỏi này. – Matijs

3

MySQL sẽ không biên dịch tất cả các thủ tục đã lưu cùng một lúc. Chúng sẽ được thực hiện theo yêu cầu như các truy vấn theo yêu cầu và khi bạn gọi chúng.

Với quy trình được lưu trữ, cơ sở dữ liệu sẽ biên dịch kế hoạch truy vấn một lần và sử dụng lại quá trình đã biên dịch. Quá trình biên dịch trước này có thể mang lại lợi thế hiệu suất đáng kể.

Các vấn đề liên quan