Bottas had the edge on Mercedes teammate Lewis Hamilton throughout qualifying, ending up a massive 0.634s quicker.
None of the top four were able to improve their times on their second runs on soft Pirellis in Q3, ensuring Mercedes kept hold of the front-row lockout it had taken earlier in the final segment of qualifying.
Sebastian Vettel was third and 0.866s off the pace, less than a tenth quicker than fourth-best Max Verstappen's Red Bull.
Charles Leclerc only had one run in Q3 thanks to having to use two sets of soft Pirellis in Q2 after compromising his first run by running wide at Campsa – also picking up some minor floor damage.
He put in two attempts on his one set of tyres, but ended up third and over two tenths slower than Verstappen – but ahead of the second Red Bull of Pierre Gasly.
Romain Grosjean and Kevin Magnussen made good on the promise the upgraded Haas showed in practice by taking seventh and eighth place, with Toro Rosso driver Daniil Kvyat ninth.
Daniel Ricciardo was slowest of those in Q3 in 10th, although he must serve a three-place grid penalty for reversing into Kvyat in the Azerbaijan Grand Prix two weeks ago.
Lando Norris was the best of those who didn't reach Q3 in 11th place after being bumped down a position by Leclerc's late improvement in Q2.
Toro Rosso driver Alex Albon, like his teammate, only had one run on fresh softs in Q2 and ended up 12th after running wide at Turn 5.
Carlos Sainz made an error on what should have been his quickest lap and ended up 13th ahead of the lead Alfa Romeo of Kimi Raikkonen and Racing Point's Sergio Perez.
Nico Hulkenberg was the fastest of those eliminated in Q1 in 16th place, 19 thousandths slower than teammate Ricciardo.
Hulkenberg crashed at the Turn 4 right hander on his first run before he set a time, but was able to recover to the pits despite crunching his front wing.
He returned to the track in the closing stages and briefly lifted himself out of the drop zone with his first flying lap on the second set of options – although his pace was hindered by having switched to an older-spec front wing.
But Raikkonen then improved to push him down to 16th, with Hulkenberg finding two-tenths on his second flier but not quite enough to escape.
Racing Point's Lance Stroll was eliminated for the fifth time in five 2019 races in 17th place, two tenths faster than 18th quickest Antonio Giovinazzi's Alfa Romeo.
George Russell won the intra-Williams battle for 19th place despite a spin at the chicane on his first run, outpacing Robert Kubica by 1.2s after the Pole failed to improve on his second run.
|1|| Valtteri Bottas ||Mercedes||1'15.406|
|2|| Lewis Hamilton ||Mercedes||1'16.040||0.634|
|3|| Sebastian Vettel ||Ferrari||1'16.272||0.866|
|4|| Max Verstappen ||Red Bull||1'16.357||0.951|
|5|| Charles Leclerc ||Ferrari||1'16.588||1.182|
|6|| Pierre Gasly ||Red Bull||1'16.708||1.302|
|7|| Romain Grosjean ||Haas||1'16.911||1.505|
|8|| Kevin Magnussen ||Haas||1'16.922||1.516|
|9|| Daniil Kvyat ||Toro Rosso||1'17.573||2.167|
|10|| Lando Norris ||McLaren||1'17.338||1.932|
|11|| Alex Albon ||Toro Rosso||1'17.445||2.039|
|12|| Carlos Sainz Jr. ||McLaren||1'17.599||2.193|
|13|| Daniel Ricciardo ||Renault||1'18.106||2.700|
|14|| Kimi Raikkonen ||Alfa Romeo||1'17.788||2.382|
|15|| Sergio Perez ||Racing Point||1'17.886||2.480|
|16|| Nico Hulkenberg ||Renault||1'18.404||2.998|
|17|| Lance Stroll ||Racing Point||1'18.471||3.065|
|18|| Antonio Giovinazzi ||Alfa Romeo||1'18.664||3.258|
|19|| Robert Kubica ||Williams||1'20.254||4.848|
|20|| George Russell ||Williams||1'19.072||3.666|
|View full results|