Pacer Mohammed Shami grabbed a five-wicket haul to condemn Sri Lanka to the lowest-ever total in World Cup history and hand India a 302-run victory and semi-final spot.
Shami also became the highest wicket-taker for India in World Cups as he returned with figures of 5-18 in his five overs..
Sri Lanka collapsed to 14 for six in their World Cup match against India in Mumbai on Thursday as the unbeaten hosts closed in on a win that would secure a semi-final place.
All the first three batsmen dismissed were out for nought, with both openers falling for golden ducks.
Set an imposing 358 to win, Sri Lanka suffered a woeful start to their chase
Pathum Nissanka was lbw to Jasprit Bumrah's first ball of the innings, a decision upheld on umpire's call after a Sri Lanka review.
Bumrah bowled two wides to give Sri Lanka their first runs, but at the start of the next over Mohammed Siraj had Dimuth Karunaratne, the other opening batsman, lbw for nought as well.
Number four Sadeera Samarawickrama survived four balls before he too was out for a duck, edging Siraj to third slip Shreyas Iyer.
Muhammad SHami struck twice in his first over to reduce Lanka to cinders.
Sri Lanka captain Kusal Mendis was then bowled for one by Siraj to leave his side three for four in the fourth over.
After the excellent Dilshan Madushanka accounted for Rohit Sharma (4) early, Virat Kohli and Shubman Gill stitched together a mammoth 189-run stand for the second wicket to set India up for a big total.
Neither were able to go on and reach triple figures, with Madushanka removing Gill for a run-a-ball 92 and then Kohli for 88.
Madushanka finished with five wickets to his name, accounting for five of India’s top six in a super individual display.
Earlier, Kusal Mendis won the toss and elected to field.
But Shreyas Iyer’s explosive 82 from 56 deliveries helped India accelerate towards the death, with Sri Lanka left with a big target of 358 to win.
While boundaries flowed with ease at Wankhede for India batters, Sri Lanka pacers made the most of the early assistance available to them. After being dispatched for a four off the very first ball of the game, Dilshan Madushanka struck back with a brilliant off-cutter to clean up Rohit Sharma.
Despite the easy-flowing nature of the wicket, Madushanka and Dushmantha Chameera were on the mark on most occasions and forced a number of errors from Virat Kohli and Shubman Gill. Both the batters survived close calls, including dropped catches, in the first six-over mark.
However, taking advantage of a good wicket, both the batters were off to a decent start at the back of a flurry of boundaries.
Following the first Powerplay, the duo made most of the surface which was easing even further. Kohli brought up his 70th ODI fifty in the 17th over, while Gill followed up with one of his own in the 19th over.
While there weren't any big sixes in these initial stages, both batters made up for the same with a number of exquisite fours and quick running between the wickets. India were going at six per over at the 25-over mark.
Gill picked pace even further after the mid-innings mark and looked set for a big one, before Madushanka returned to snare him with a beauty. Gill sought to upper-cut Madushanka but the latter bowled a sharp off-cutter and the batter could merely power it to the keeper.
Things got even better for the Lions when Madushanka trapped Kohli with yet another off-cutter. The veteran tried to weave it through covers but could only offer a catch to Pathum Nissanka.
Shreyas Iyer and KL Rahul, however, used attack as the best form of defence. Iyer looked especially comfortable at his home ground, hitting a number of exquisite sixes, including a humungous one off Kasun Rajitha in the 36th over. At 106 m, this was the biggest hit of the tournament.
Rahul fell for 21 to Dushmantha Chameera, but that brought another Mumbai player, Suryakumar Yadav to the ground.
He began with two fours straight down the ground, but was removed by the dangerous Suryakumar Yadav for just 12 to leave the game fascinatingly poised inside the final ten overs of the first innings.
Shreyas Iyer let rip after passing his fifty, hitting six maximums in his excellent 82 from 56 balls, removed by that man Madushanka, who finished with 5/80 from his ten overs.
And while some late hits from Ravindra Jadeja lifted the total to 357/8, India would have finished the innings slightly disappointed that they hadn’t racked up even more.
Dushan Hemantha came into the side in place of Dhananjaya de Silva. India captain Rohit wasn't too displeased at being asked to bat first, believing that it was a good wicket apart from some early help for the pacers. He also stated that the ball might jag a bit in the evening. India played the same side that triumphed against England in Lucknow.
India are out to continue their unblemished start to the campaign and secure a seventh consecutive victory that would ensure their qualification for the knockout stage of the ICC Men's Cricket World Cup 2023.
The hosts could also reclaim the first spot in the standings from South Africa ahead of what looms as a top-of-the-table clash, though they first have to overcome a Sri Lanka outfit with plenty to play for.
India are aiming to continue their winning streak without Hardik Pandya as the all-rounder remains sidelined with an ankle injury, though they have barely skipped a beat since Mohammed Shami took his place.
Sri Lanka need to bounce back from a crushing loss to Afghanistan to revive their campaign, that is on the brink of collapsing with only two wins from six matches with only Bangladesh and New Zealand still to come.
The 1996 World Cup champions have had to replace skipper Dasun Shanaka, Lahiru Kumara, and Matheesha Pathirana since arriving in India, while star spinner Wanindu Hasaranga was ruled out before the journey began.
But the wounded Sri Lanka should not be discounted with Sadeera Samarawickrama, Pathum Nissanka, and stand-in skipper Kusal Mendis all in fine form with the bat, while Dilshan Madushanka and Kasun Rajitha have made an impact with the ball.
Playing XIs
India squad: Rohit Sharma (c), Shubman Gill, Virat Kohli, Shreyas Iyer, KL Rahul (wk), Suryakumar Yadav, Ravindra Jadeja, Mohammed Shami, Jasprit Bumrah, Kuldeep Yadav, Mohammed Siraj.
Sri Lanka squad: Pathum Nissanka, Dimuth Karunaratne, Kusal Mendis (c) (wk), Sadeera Samarawickrama, Charith Asalanka, Angelo Mathews, Dushan Hemantha, Dushmantha Chameera, Maheesh Theekshana, Kasun Rajitha, Dilshan Madushanka