[英]Query fast with literal but slow with variable
我在我的應用程序中為 SQL 服務器使用 Typeorm。 當我通過像connection.query(select * from user where id = 1)
這樣的本機查詢時,性能非常好,不到 0.5 秒。
如果我們使用findone
或QueryBuilder
方法,大約需要 5 秒才能得到響應。
在進一步調試中,我們發現像這樣直接將值傳遞給查詢,
return getConnection("vehicle").createQueryBuilder()
.select("vehicle")
.from(Vehicle, "vehicle")
.where("vehicle.id='" + id + "'").getOne();
比
return getConnection("vehicle").createQueryBuilder()
.select("vehicle")
.from(Vehicle, "vehicle")
.where("vehicle.id =:id", {id:id}).getOne();
我們可以做任何優化來解決參數化查詢的問題嗎?
我不知道 Typeorm,但在我看來區別很明顯。 在一種情況下,您在數據庫中查詢整個表並在本地對其進行過濾,而在另一種情況下,您將過濾器發送到數據庫並在將數據發送回客戶端之前過濾數據。
根據表的大小,這會產生很大的影響。 考慮從 1000 萬條記錄中挑選一條記錄。 僅將數據傳輸到本地機器的時間就慢了 1000 萬倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.