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