Hiểu các yêu cầu của bạn trước khi thiết kế lược đồ (nếu có thể).
Tìm hiểu về dữ liệu, 1) lập chỉ mục 2) loại lưu trữ được sử dụng, 3) công cụ hoặc tính năng của nhà cung cấp; tức là ... bộ nhớ đệm, khả năng trong bộ nhớ 4) kiểu dữ liệu 5) kích thước của bảng 6) tần suất truy vấn 7) khối lượng công việc liên quan nếu tài nguyên được chia sẻ 8) Kiểm tra
A) Yêu cầu sẽ thay đổi. Nếu phần cứng không thể hỗ trợ khối lượng công việc dự kiến, bạn nên đánh giá lại cách cung cấp các yêu cầu trong khối lượng công việc. Về cột bổ sung vào bảng. Nếu cơ sở dữ liệu hỗ trợ các chế độ xem, bạn có thể tạo chế độ xem được lập chỉ mục (?) Cho dữ liệu cụ thể với các cột được đặt tên cụ thể (so với chọn '*'). Định kỳ xem xét dữ liệu và lược đồ của bạn để đảm bảo bạn không bao giờ gặp phải hội chứng "Rác vào" -> "Rác ra".
Giả sử không có giải pháp nào khác; bạn có thể tính đến những điều sau đây Luôn có nhiều giải pháp cho một vấn đề.
1) Lập chỉ mục: Việc chọn * sẽ thực hiện quét bảng. Tùy thuộc vào các yếu tố khác nhau, điều này có thể liên quan đến việc tìm kiếm đĩa và / hoặc tranh chấp với các truy vấn khác. Nếu bảng đa mục đích, đảm bảo tất cả các truy vấn đều có hiệu suất và thực hiện bên dưới thời gian mục tiêu của bạn. Nếu có một lượng lớn dữ liệu và mạng của bạn hoặc tài nguyên khác không được điều chỉnh; bạn cần phải tính đến điều này Cơ sở dữ liệu là một môi trường chia sẻ.
2) loại lưu trữ. Tức là: nếu bạn đang sử dụng ổ SSD, đĩa hoặc bộ nhớ. Thời gian I / O và tải trên hệ thống / cpu sẽ khác nhau.
3) DBA có thể điều chỉnh cơ sở dữ liệu / bảng để có hiệu suất cao hơn không? Giả sử vì bất kỳ lý do gì, các đội đã quyết định chọn '*' là giải pháp tốt nhất cho vấn đề; DB hoặc bảng có thể được tải vào bộ nhớ. (Hoặc phương pháp khác ... có thể phản hồi được thiết kế để phản hồi với độ trễ 2-3 giây? --- trong khi quảng cáo phát để kiếm doanh thu của công ty ...)
4) Bắt đầu tại đường cơ sở. Hiểu các loại dữ liệu của bạn và cách trình bày kết quả. Các kiểu dữ liệu nhỏ hơn, số lượng trường làm giảm lượng dữ liệu được trả về trong tập kết quả. Điều này để lại tài nguyên có sẵn cho các nhu cầu hệ thống khác. Các tài nguyên hệ thống thường có một giới hạn; "Luôn luôn" làm việc dưới các giới hạn này để đảm bảo sự ổn định và hành vi có thể dự đoán được.
5) kích thước của bảng / dữ liệu. chọn '*' là phổ biến với các bảng nhỏ. Chúng thường phù hợp với bộ nhớ và thời gian phản hồi nhanh. Một lần nữa .... xem lại yêu cầu của bạn. Lập kế hoạch cho tính năng creep; luôn có kế hoạch cho các nhu cầu hiện tại và có thể trong tương lai.
6) Tần suất truy vấn / truy vấn. Hãy nhận biết các khối lượng công việc khác trên hệ thống. Nếu truy vấn này tắt mỗi giây và bảng nhỏ. Tập kết quả có thể được thiết kế để ở trong bộ nhớ cache / bộ nhớ. Tuy nhiên, nếu truy vấn là một quy trình hàng loạt thường xuyên với Gigabyte / Terabyte dữ liệu ... bạn có thể tốt hơn để dành tài nguyên bổ sung để đảm bảo khối lượng công việc khác không bị ảnh hưởng.
7) Khối lượng công việc liên quan. Hiểu cách các tài nguyên được sử dụng. Mạng / hệ thống / cơ sở dữ liệu / bảng / ứng dụng được dành riêng hay chia sẻ? Các bên liên quan là ai? Đây là cho sản xuất, phát triển, hoặc QA? Đây có phải là một "sửa chữa nhanh" tạm thời. Bạn đã thử nghiệm kịch bản? Bạn sẽ ngạc nhiên khi có bao nhiêu vấn đề có thể tồn tại trên phần cứng hiện tại. (Có, hiệu suất nhanh ... nhưng thiết kế / hiệu suất vẫn bị suy giảm.) Hệ thống có cần thực hiện 10K truy vấn mỗi giây so với 5-10 truy vấn mỗi giây không. Là máy chủ cơ sở dữ liệu dành riêng, hoặc thực hiện các ứng dụng khác, giám sát thực thi trên tài nguyên được chia sẻ. Một số ứng dụng / ngôn ngữ; O / S sẽ tiêu thụ 100% bộ nhớ gây ra các triệu chứng / vấn đề khác nhau.
8) Kiểm tra: Kiểm tra lý thuyết của bạn và hiểu càng nhiều càng tốt. Vấn đề lựa chọn '*' của bạn có thể là một vấn đề lớn hoặc có thể là điều bạn thậm chí không cần phải lo lắng.
SELECT COUNT(*)
xấu là vô cùng cũ và lỗi thời . Để biết thông tin vềSELECT *
- xem: stackoverflow.com/questions/1960036/ từ