dbForge Data Compare for MySQL入門教程:服務器端和客戶端排序和篩選
在dbForge Data Compare for MySQL的數(shù)據(jù)生成器中,可以在客戶端或服務器端執(zhí)行數(shù)據(jù)的排序和過濾。
如果表中的記錄不多,則在從表中檢索數(shù)據(jù)或執(zhí)行SELECT語句后,它們都會顯示在結果網格中。如果要對這些記錄進行排序或使用過濾器,則會在客戶端執(zhí)行過濾和排序過程,并處理所有可用記錄。但是,如果表中有許多記錄,則在執(zhí)行SELECT語句或一次檢索數(shù)據(jù)后不會顯示它們,因為此類操作可能導致客戶端計算機掛起或與操作過多數(shù)據(jù)相關的其他一些問題。
另一種情況是,當網格中沒有顯示所有記錄時,就是當Paginal Mode打開并且有更多記錄,然后是一頁上顯示的記錄數(shù)。在這些情況下,如果執(zhí)行客戶端排序或篩選,則僅處理客戶端計算機上可用的記錄。這意味著您將無法獲得過濾或排序的完整結果。這就是為什么數(shù)據(jù)生成器在網格中不能顯示所有記錄時執(zhí)行服務器端過濾或排序。
執(zhí)行服務器端篩選或排序時,應用程序會向服務器發(fā)送一個查詢,該查詢是對起始查詢的修改。這種方式的缺點是服務器資源被占用,但好處是用戶將獲得完整的排序或過濾結果。但是一旦收到所有記錄,例如,在按CTRL + END或滾動到結尾之后,將關閉服務器端篩選和排序,并使用客戶端篩選和排序。
服務器端排序和過濾期間可能出現(xiàn)的問題:
在某些情況下,應用程序無法修改起始查詢以將其發(fā)送到服務器并執(zhí)行服務器端排序或過濾。這些情況如下:
- SELECT子句中有一個沒有別名的表達式。實際上這是對MS SQL Server的限制 - 無法在SELECT子句中修改包含沒有別名的語句的查詢。如果列沒有別名,則無法對其他列中的數(shù)據(jù)進行排序或過濾,直到獲取所有數(shù)據(jù)或給出別名為止。
- 有一個ORDER BY子句的查詢。在這種情況下,不能執(zhí)行服務器端篩選,這是因為SQL Server限制。