Sampling rate of arduino?

No, you cannot do that. It is getting the data out of the Arduino that takes the time. I told you what you need to do. You must store the data internally, in an array in the RAM, and then send the data when you have stopped doing the measurements. You can do that with analogRead( ), you don’t need to use interrupts if you don’t need the absolute maximum speed. You should be able to record about 200 points over 1 cycle of mains using analogRead( ) and storing the result in an array.

The very basic idea is:

#include <Arduino.h>

#define SIZE 200
#define inPin 0

unsigned int storedValue[SIZE];


void setup() 
{  
  Serial.begin(9600);
  
  for (int n=0; n<SIZE; n++)
 {
  storedValue[n] = analogRead(inPin);
 }

 for (int m = 0; m<SIZE; m++)
 {
  Serial.println(storedValue[m]*5.0/1024);
 }

}

void loop(){ }