Мазепа бував на всіх шведських воєнних нарадах і не міг не знати, що генеральна битва, яка мала вирішити долю Швеції та України, була намічена Карлом на 29 червня. Однак вночі 26 червня розвідка повідомила шведського короля, що 28 червня до російської армії має приєднатися 40-тисячне калмицьке військо хана Аюки (як виявилося згодом, чутка перебільшила кількість калмиків, що йшли на допомогу до Петра, в кілька разів). Довідавшись про це, король вирішив прискорити події. Остання військова нарада відбулася о четвертій годині дня 26 червня, на ній Реншильд виклав свій план наступу і посварився з генерал-квартирмейстером шведської армії Юлленкруком. Навряд чи буде перебільшенням припустити, що Іван Степанович Мазепа погано спав у ніч перед вирішальною битвою, так само як і багато хто зі шведського генералітету – заважали погані передчуття.
Вже звечора, близько одинадцятої, частина шведського війська виступила з табору, сподіваючись застукати ворога зненацька. Ближче до ранку виступила вся армія. Попереду чотирма колонами йшла піхота; за нею рухалась кіннота, поділена на шість колон. При війську був поранений Карл XII, якого везли на спеціальних ношах, запряжених двома кіньми. Гетьман Мазепа, залишаючись в своєму обозі біля села Пушкарівка, супроводжував поглядом колони вояків у синій формі, аж поки вони не розтанули в темряві української літньої ночі. Напередодні він, ніби не помічаючи своїх років і хвороб, хвацько промчав перед лавами сердюків, реєстровців і запорожців на чудовому коні, зірвавши оплески серед шведських кіннотників. Але поранений Карл зауважив своєму союзникові, що росіяни, схоже, полюють на ворожих генералів і життя гетьмана під великою загрозою. Це була правда: протягом кампанії 1708 – 1709 років гетьман кілька разів ледь не потрапив до російського полону. Івану Степановичу настійно рекомендували залишитися в обозі шведсько-українського війська. Але значна частина його кіннотників взяла участь у битві, прикриваючи шведські фланги.
Бій розпочався з першими променями вранішнього сонця. Шведи натрапили на дві лінії російських редутів (земляних укріплень), і тут почався гарячий бій. Воїнам Карла вдалося захопити перші два редути. Але їхній подальший рух був затриманий ураганним артилерійським вогнем та кіннотою Меншикова. Тоді король наказав і своїй кінноті рушити вперед, і драгунські полки Меншикова відступили до правого флангу російського табору. Здавалося, в ході битви настав вирішальний момент, і перемога шведів могла здатися цілком імовірною. До принца. Максиміліана-Емануеля Вюртемберзького, полковника на шведській службі, навіть звернувся один із командирів козацьких загонів Скоропадського з пропозицією перейти з двома тисячами козаків на бік шведів. Проте принц заявив, що не може приймати такі рішення без дозволу Карла XII, і сприятлива нагода була змарнована.
Тим часом навколо редутів точився запеклий бій. Кілька разів шведи атакували редути, але великі втрати змусили Карла відмовитися від подальших спроб захопити редути штурмом. Король вирішив або обійти їх, або пройти між ними. Обійти їх шведам не вдалося, а спроба прорватися вперед завершилася тим, що 6 батальйонів шведської піхоти і 10 ескадронів кінноти під командуванням генералів В. Шліппенбаха і К. Рооса були відрізані від головних сил шведської армії і примушені відступити до Яківецького лісу. Помітивши це, Петро послав туди Меншикова з 5 батальйонами піхоти і 5 драгунськими полками. Під час бою війська Рооса та Шліппенбаха були змушені капітулювати – шведська армія втратила майже чверть піхоти на початку битви.
Тим часом наступаюча шведська піхота, переслідуючи кінноту росіян, підійшла надто близько до табору царя і потрапила під жахливий артобстріл. Обидві армії перешиковували свої лави на узліссі Будищанського лісу, і о дев'ятій годині ранку почався другий, вирішальний етап битви. Він тривав усього дві години – вирішальні дві години в історії Північної та Східної Європи й України. Мужня і дисциплінована шведська армія натрапила на гідного супротивника, який до того ж переважав її чисельно та за кількістю артилерії. Шведська піхота, незважаючи на артобстріл, подекуди прорвалася на дистанцію багнетного бою, в якому шведам не було рівних. Генерал Адам Левенхаупт (суворий «генерал марш-марш», як називали його солдати) відчайдушно намагався прорвати російську лінію, і гвардійським шведським полкам це майже вдалося – принаймні саме тут, на шведському правому фланзі, вдалося потіснити російську піхоту. Казанський, Псковський, Сибірський, Московський, Бутирський та Новгородський полки почали відступати, і, якби не особисте втручання Петра І, що зупинив відступаючих новгородців (їхній полковник загинув у бою), відступ мав певний шанс перетворитися на втечу. Дотепер деякі шведські історики твердять, що якби Реншильд вчасно кинув у прорив шведську кінноту, битва під Полтавою могла б мати зовсім інші наслідки (хоча, зрозуміло, у їхніх російських колег це припущення викликає несприйняття). На довершення всього в ноші Карла XII влучило російське ядро, а за кілька хвилин по тому було вбито коня, на якого пересів шведський король. Карл знепритомнів, а його війська, що і так ледь тримали лінію, почали відступати. Згодом відступ перетворився на втечу. Левенхаупт говорив згодом, що солдатів, які тікали, не зупинив би і сам чорт. Відступ намагалася прикрити шведська та українська козацька кіннота. Карл XII врятувався від, здавалося б, неминучого російського полону завдяки одному з драбантів (особиста гвардія шведського короля), який віддав йому свого коня.