Đây là giải pháp thay thế để kiểm tra nhanh và không phải là giải pháp chuyên nghiệp. Nó chỉ hoạt động với các cột số dưới dạng định danh, nếu không thì chuyển đổi các cột chuỗi thành số [đếm các chữ cái, chuyển đổi thành byte hoặc tương tự] nếu cần và NULL không có vấn đề gì
Cách giải quyết không chuyên nghiệp đầu tiên. mẫu
Cuối cùng, do các truy vấn mất quá nhiều thời gian trên bảng 1 Mio để so sánh với bảng khác đôi khi có giá trị NULL trong các trường cần quan tâm, nên tôi đã lấy khá nhiều mẫu số hàng đã chọn để kiểm tra sự khác biệt của hai . Tôi không tìm thấy bất kỳ sự khác biệt nào, nghĩ rằng dù sao chúng cũng giống hệt nhau
Cách giải quyết thứ hai chuyên nghiệp hơn một chút. tổng [] của các cột
Mặc dù mẫu đó có vẻ đủ, nhưng tôi muốn chắc chắn và tổng hợp tất cả các cột số, tôi thấy sự khác biệt
SELECT sum[col1], sum[col2] FROM table1
UNION
SELECT sum[col1], sum[col2] FROM table2
Đầu ra giống như
tổng[col1]tổng[col2]1111134567812345678910123411111123456123456789101234
Việc tổng hợp các cột hoặc toàn bộ bảng này là kiểm tra nhanh và nó thường đã trả lời câu hỏi chính và tiết lộ thêm nếu bạn nhóm bảng theo các thuộc tính thú vị
tổng kiểm tra
Nó hơi giống với giải pháp CHECKSUM trong MySQL
Tâm trí. mysql. , không phải Postgresql
CHECKSUM TABLE original_table, backup_table;
Bạn có thể tìm thấy những cách tốt hơn tại Làm cách nào tôi có thể nhận được hàm băm của toàn bộ bảng trong postgresql?
Vấn đề ở đây là nó chỉ là một Hash, thông tin như trong trường hợp của tôi, khi tôi có thể thấy từ tổng của col1 rằng phải có giá trị 0 hoặc NULL, bị mất
Bước tiếp theo. tìm sự khác biệt
Bước tiếp theo để tìm sự khác biệt là sắp xếp theo col1 trong cả hai bảng hoặc nhóm theo - count[] trên col1 nếu nó không phải là duy nhất
Bạn cũng có thể đã biết thuộc tính nào có thể là vấn đề và kiểm tra xem, trong trường hợp của tôi, tôi mới biết rằng một số col1 có thể là 0. Tổng 0 không có ý nghĩa gì, do đó tính ở đây và tổng của cột khác chứng minh sự khác biệt
SELECT count[col1], sum[col2] FROM table1 WHERE col1 = 0
UNION
SELECT count[col1], sum[col2] FROM table1 WHERE col1 = 0
đếm[col1]sum[col2]12341234567893456543210
Truy vấn ngược
SELECT count[col1], sum[col2] FROM table1 WHERE col1 0
UNION
SELECT count[col1], sum[col2] FROM table1 WHERE col1 0
và sau một thời gian, bạn may mắn tìm thấy các ứng viên hoặc sau một nhóm theo tổng quan mà bạn cũng có thể kiểm tra bằng cách trừ cái này với cái kia,
CHECKSUM TABLE original_table, backup_table;
0Có lẽ bây giờ hãy chạy các truy vấn dài hạn
Nhưng ngay cả khi bây giờ bạn biết các tập lệnh nặng để tìm ra sự khác biệt thực sự khi kiểm tra toàn bộ bảng, thì ít nhất bạn cũng biết rằng việc chờ đợi một giờ trở lên hoàn toàn có ý nghĩa. . ]
gợi ý nhỏ. chọn vào một bảng mới
gợi ý nhỏ. nếu bạn chạy một truy vấn dài như vậy, trước tiên hãy xem xét việc lập chỉ mục. Ngoài ra, hãy kiểm tra xem bạn có thể trực tiếp tạo bảng từ kết quả sql hay không bằng cách sử dụng
Nếu bạn muốn biết hai bảng có khác nhau hay không, hãy chạy cái này
SELECT IF[COUNT[1]>0,'Differences','No Differences'] Comparison FROM
[
SELECT
column_name,ordinal_position,
data_type,column_type,COUNT[1] rowcount
FROM information_schema.columns
WHERE table_schema=DATABASE[]
AND table_name IN ['product_today','product_yesterday']
GROUP BY
column_name,ordinal_position,
data_type,column_type
HAVING COUNT[1]=1
] A;
Nếu bạn thực sự cần thấy sự khác biệt, hãy chạy cái này
SELECT column_name,ordinal_position,data_type,column_type FROM
[
SELECT
column_name,ordinal_position,
data_type,column_type,COUNT[1] rowcount
FROM information_schema.columns
WHERE table_schema=DATABASE[]
AND table_name IN ['product_today','product_yesterday']
GROUP BY
column_name,ordinal_position,
data_type,column_type
HAVING COUNT[1]=1
] A;
Nếu bạn muốn biết liệu hai bảng có khác nhau trong cơ sở dữ liệu
CHECKSUM TABLE original_table, backup_table;
1 hay không, hãy chạy lệnh nàySELECT IF[COUNT[1]>0,'Differences','No Differences'] Comparison FROM
[
SELECT
column_name,ordinal_position,
data_type,column_type,COUNT[1] rowcount
FROM information_schema.columns
WHERE table_schema='mydb'
AND table_name IN ['product_today','product_yesterday']
GROUP BY
column_name,ordinal_position,
data_type,column_type
HAVING COUNT[1]=1
] A;
Nếu bạn thực sự cần thấy sự khác biệt, hãy chạy cái này
SELECT column_name,ordinal_position,data_type,column_type FROM
[
SELECT
column_name,ordinal_position,
data_type,column_type,COUNT[1] rowcount
FROM information_schema.columns
WHERE table_schema='mydb'
AND table_name IN ['product_today','product_yesterday']
GROUP BY
column_name,ordinal_position,
data_type,column_type
HAVING COUNT[1]=1
] A;
Nếu bạn muốn biết liệu
CHECKSUM TABLE original_table, backup_table;
2 và CHECKSUM TABLE original_table, backup_table;
3 có khác nhau hay không, hãy chạy cái này________số 8Nếu bạn thực sự cần thấy sự khác biệt, hãy chạy cái này
SELECT column_name,ordinal_position,data_type,column_type FROM
[
SELECT
column_name,ordinal_position,
data_type,column_type,COUNT[1] rowcount
FROM information_schema.columns
WHERE
[
[table_schema='db1' AND table_name='tb1'] OR
[table_schema='db2' AND table_name='tb2']
]
AND table_name IN ['product_today','product_yesterday']
GROUP BY
column_name,ordinal_position,
data_type,column_type
HAVING COUNT[1]=1
] A;