Chasing 299 for victory, Canada were bowled out for 123 in the 43rd over.
Nagpur: Zimbabwe bowled out Canada for 123 on Monday to comfortably win their World Cup Group A match by 175 runs.
With his side defending a healthy 298-9, Zimbabwe spinner Ray Price opened the bowling and took three wickets in the first six overs to reduce the ICC Associate nation to 7-3.
That was too weak a position even on a good wicket at Nagpur's VCA Stadium and Zimbabwe secured victory with 7.5 overs remaining. Price finished with 3-16, with fellow spinner Graeme Cremer taking 3-31.
Zimbabwe too had struggled early and slipped to 7-2 after losing its openers but Tatenda Taibu hit 98 and added 181 for the third wicket with Craig Ervine (85).
Indian-born legspinner Balaji Rao took 4-57 as Zimbabwe slipped from 188-2 to 240-7 but Taibu's 99-ball knock meant Canada needed a bright start to its innings — opened by the oldest and youngest players in the tournament — to have any chance of a second win in 15 World Cup matches.
That didn't happen.
The 40-year-old John Davison misjudged a straightening delivery that clipped offstump and Nitish Kumar, the World Cup's youngest ever player at 16 years, 283 days, was caught and bowled for just 1 by Price.
Price, who troubled Australia's batsmen in Zimbabwe's opening 71-run loss, then had captain Ashish Bagai caught next ball when he swept straight to Sean Williams at square leg.
Zimbabwe's attack was weakened by a side injury to Chris Mpofu that forced the pace bowler off the field for treatment in the dressing room. But Taibu stumped Jimmy Hansra off the bowling of Prosper Utseya and Greg Lamb bowled Ruvindu Gunasekera for 24.
Rizwan Cheema and Tyson Gordon fell to leave Canada on 78-7 and although Zubin Surkari topscored with 26 and helped put on 21 and 25 for the eighth and ninth wickets, Lamb had him stumped as Cremer cleaned up the rest of the tail.
With Canada never having scored more than 265 in a one-day international against a test nation, Zimbabwe's total was always likely to be too much for the ICC Associate side.
Zimbabwe captain Elton Chigumbura won the toss and opted to bat first on what has been a good wicket in the two previous matches played on it.
Brendan Taylor, who scored 37 when Zimbabwe cruised to a 143-run win in the teams' only previous one-day international five years ago, was hit on the pad by an inswinger from Khurram Chohan that was hitting middle. And Charles Coventry was back in the dressing room halfway through the fourth over, swinging across a delivery by Baidwan.
Zimbabwe hit back but Rao broke the partnership with a ball that spun back from outside off and took an inside edge before spooning up off Ervine's pads.
Bagai, another of the wicketkeeper-captains at the World Cup, ran from behind the stumps in front of the batsman to take the catch and did the same in the following over, diving to get rid of Chigumbura — this time off a delivery by Rao's fellow spinner Cheema.
Taibu had progressed serenely with Ervine alongside him, rotating the strike and selecting his shots well, but with the pressure back on and partners changing he slipped up and hit Rao straight to Davison just inside the deep midwicket boundary.
Greg Lamb dragged Rao onto his stumps and the spinner got his fourth wicket when Bagai again sprang forward to take a catch off the back of Williams' bat. Prosper Utseya holed out to Chohan for 22 and Baidwan bowled Cremer for 26, leaving Price unbeaten on 10 and Mpofu on 3.