How we measure speed on large CSV files
By MegaRows · Published · Updated · 5 min read
When this site says a 10-million-row CSV opens and draws its first chart in about 3 seconds, that comes from a test we can repeat. This page says exactly how we run it: the files, the computer, the browser, what we time and how often, so you can judge the figures and try the same on your own machine. These are our own measurements, not an independent benchmark.
The results
Each file opened 5 times cold and 5 times warm, on 8 October 2026. The middle value of the five (the median) first, then the fastest and slowest run.
| File | First chart, cold | File read, cold | First chart, warm |
|---|---|---|---|
| 10,000,000 rows × 5 columnsCSV, 423 MB | 2.74 s2.64 to 3.05 s | 2.68 s2.54 to 2.99 s | 2.58 s2.52 to 2.93 s |
| 2,000,000 rows × 9 columnsCSV, 143 MB | 1.15 s1.06 to 1.38 s | 1.08 s1.02 to 1.32 s | 1.20 s1.01 to 1.33 s |
The site rounds the 10-million-row median, 2.74 s, to “about 3 seconds”, and always says next to it what it was measured on.
Smaller files: 5,000 and 1,000,000 rows
Two UK weather files from our sample files, each opened 5 times cold and 5 times warm on 23 October 2026, on the same laptop, in Chromium 153 and a 1440 × 900 window, timed the same way as above. Measured in MegaRows only.
| File | First chart, cold | File read, cold | First chart, warm |
|---|---|---|---|
| 5,000 rows × 8 columnsCSV, 232 KB | 0.14 s0.13 to 0.16 s | 0.09 s0.09 to 0.12 s | 0.07 s0.07 to 0.08 s |
| 1,000,000 rows × 8 columnsCSV, 46.7 MB | 0.48 s0.47 to 0.52 s | 0.44 s0.42 to 0.47 s | 0.43 s0.41 to 0.44 s |
- 5,000 rows, 232 KB: the first 5,000 hours of the 100,000-row UK weather sample, with its header and units row. See the sample.
- 1,000,000 rows, 46.7 MB: the 1,000,000-row UK weather sample, byte for byte the file the plotter makes on your device when you open it, in the same eight columns, one reading an hour from 1912 to January 2026. See the sample.
What we time
Every run starts the moment the file is chosen and stops at two points:
- File read: the plotter has read the whole file and its table, column list and statistics are ready.
- First chart: the first chart has been drawn with the file’s data, usually a few hundredths of a second later. This is the figure the site quotes.
Both are measured inside the page, to a fraction of a millisecond, not with a stopwatch around the browser. We also note the read time the plotter shows you in the file’s line (“read in 2.61 s on your device” for the median 10-million-row run). It leaves out the moment it takes to start reading, so it is a little shorter.
The files
Two made-up CSV files, generated by a script with a fixed seed, comma-separated, with a header row and no quotes:
- 10,000,000 rows × 5 columns, 423 MB: a time column in seconds (1,024 readings a second) and 4 columns of made-up signals with 4 decimals.
- 2,000,000 rows × 9 columns, 143 MB: a time column and 8 columns of made-up signals with 2 to 4 decimals.
Make a file of the same shape
These lines of Python (NumPy and pandas) write a CSV with the same rows, columns and number format as our 10-million-row file, also 423 MB:
import numpy as np, pandas as pd
n = 10_000_000
t = np.arange(n) / 1024 # 1,024 readings a second
rng = np.random.default_rng(1)
cols = {f"{city}_Gust": np.round(np.sin(2 * np.pi * (5 + k) * t) + 0.2 * rng.standard_normal(n), 4)
for k, city in enumerate(["London", "Leeds", "York", "Bath"])}
pd.DataFrame({"time_s": np.round(t, 7), **cols}).to_csv("speed-test-10m.csv", index=False)A file made with these lines, timed the same way on the same day: first chart in 3.13 s cold (2.38 to 3.57 s) and 2.30 s warm (2.20 to 2.46 s). Runs on the same machine vary by a few tenths of a second, which is why we give the median of five.
The computer and the browser
- Computer: a MacBook Air with an Apple M4 chip (10 cores: 4 performance and 6 efficiency) and 24 GB of memory, running macOS 26.6.
- Browser: Chromium 153, the open-source browser that Chrome is built on, without a visible window, driven by our automated browser tests (Playwright 1.63) in a Linux container (Docker Desktop) given all 10 cores and 11.7 GB of memory, in a 1440 × 900 window.
- The site: a copy built from the same code and served from the same computer, so downloading the page took no time. On a real connection, a first visit also downloads the plotter’s code, about 330 KB compressed; later visits take it from the browser’s cache.
Cold and warm, and five of each
- Cold: a new browser profile each time, with nothing cached: a fresh page loads the plotter, then the file is chosen.
- Warm: the same page again: “Open another file”, then the same file.
- Repeats: five of each, and we give the median, so one slow or fast run does not set the figure. The operating system had the file in its memory for every run, as it usually has a file you have just saved or downloaded; reading it from a slow disk for the first time takes longer.
Warm and cold come out close, because almost all the time goes into reading the file itself, which happens again in full on every open.
What the chart shows, and what the maths uses
Ten million rows are far more points than a screen has pixels. The first chart is an overview drawn from every row, in which each peak and dip stays visible; when you zoom in, the exact values of the range in view are drawn. The statistics panel, the cursors’ readout, the Math dialog and every download always work on every row, never on the overview.
The spike test: one reading in a million
An overview is only useful if a short event survives it. We take the 1,000,000-row weather sample and set one hourly reading of London_Temperature, at 1969-01-14 08:00, to 45.0 °C; every other reading in that column is 34.8 °C or lower. Opened in a 1440 × 900 window, the first chart shows all 1,000,000 rows, and its line rises to 45.0 °C at that hour, within 2 pixels of the reading’s value and time. An automated test makes this file and checks the chart’s pixels before every update. Measured in MegaRows only.
Known limits
- Your device sets the pace. These are the figures for one recent laptop. Older or slower computers take longer, and phones and tablets have much less memory: a file of several hundred megabytes is best opened on a laptop or desktop.
- No fixed row limit, but memory runs out. The largest file in our tests is a 1.4 GB export with 28 million rows, which opens; we publish no time for it. A file too big for the memory your browser can give the page may fail to open, or the browser may close the tab.
- Timed in Chromium only. Safari’s engine is tested for correctness, set up as an iPhone, an iPad and a Mac, but not timed. We have not timed Firefox or a Windows computer.
- Formats have their own limits: an Excel sheet holds at most 1,048,576 rows, a JSON file that is not JSON Lines can be up to 256 MB, and a variable in a .mat file written by CSV to MAT can be up to 2 GB.
- Other figures on the site come from their own tests on the same laptop and browser: a 10-million-row Parquet file opens and draws its first chart in about 1 second (7 October 2026); an Excel sheet at the 1,048,576-row maximum opens in under 3 seconds and a JSON Lines file of 100,000 events in about 0.3 seconds (4 October 2026).
Try it on your own computer
Plot a big CSV online or open it in the large CSV viewer, make one with the lines above, or download a sample time series CSV of 100,000 hourly rows. Once the chart shows, the file’s line says how long your device took to read it: “read in … s on your device”. Nothing is uploaded, so the time is your computer’s alone. For how we check the maths rather than the speed, see how we check our maths.
Related tools and guides
- CSV plotterOpen a CSV, Excel, TXT, JSON, MATLAB, Parquet, HDF5 or LabVIEW TDMS file with millions of rows and plot it in several linked charts, with zoom and statistics. Works today.
- Large CSV viewerOpen a CSV with millions of rows in your browser: scroll every row, see each column’s type and statistics, chart any column. Works today.
- MATLAB .mat file viewerOpen v4 to v7.3 .mat files without MATLAB and plot any signal. Works today.
- Parquet viewerOpen large .parquet files, see the schema at once and plot millions of rows, without Python. Works today.
- TDMS viewerOpen .tdms files from LabVIEW, DIAdem and DAQmx loggers: every group, channel and property, each channel plotted against its time. Works today.
- HDF5 viewerOpen .h5, .hdf5 and NetCDF-4 .nc files: every group, dataset and attribute, each group’s datasets plotted against their time. Works today.
- MAT to CSVConvert the signals of a .mat file, v4 to v7.3, to a CSV for Excel or Python, without MATLAB. Works today.
- Parquet to CSVConvert a .parquet file to CSV in your browser, with the columns you pick. Works today.
- TDMS to CSVConvert the channels of a .tdms file to CSV, a group at a time, with its time column, without LabVIEW or Excel add-ins. Works today.
- HDF5 to CSVConvert the datasets of an .h5 or NetCDF-4 file to CSV, a table at a time, with its time column, without Python. Works today.
- Excel to CSVConvert any sheet of an .xlsx or .xlsm workbook to CSV, with the saved results of formulas, real dates and 15 significant digits. Works today.
- JSON to CSVConvert JSON and JSON Lines files to CSV: nested fields become columns named by their path, arrays stay as JSON text. Works today.
- CSV to MATConvert a CSV, Excel, JSON or Parquet file to a MATLAB .mat file: a field per column, with names and units, every row. Works today.
- Merge CSV filesAppend many CSV files into one, even with different columns or separators. Works today.
- Split CSV filesSplit a CSV too big for Excel into parts of 1,000,000 rows, parts of a size you choose, or one file per value of a column. Works today.
- CSV row counterCount the lines in a CSV, TSV or TXT file of any size. Works today.
- CSV statisticsCount, missing values, min, max, mean, standard deviation, RMS and peak to peak of each number column, for the whole file or the rows you zoom into. Works today.
- CSV histogramA histogram of any number column, with automatic bins or 10 to 200 of them, and each bin’s count as a table. Works today.
- CSV too large for Excel?Open every row of a CSV beyond Excel’s 1,048,576-row limit, or work around the limit in six other ways.
- FFT and PSD from a CSVTurn a signal column into an FFT spectrum or a PSD with Grms, with results checked against SciPy. Works today.
- PSD calculatorTurn a vibration column into a power spectral density (Welch) in g²/Hz, with the Grms of any band and a dB view. Works today.
- Spectrogram from CSVSee how the frequencies of a measured signal change over time, as a heat map in dB, with the window and range you choose. Works today.
- FRF and coherencePick an input and an output column and get the frequency response (H1, H2, magnitude and phase) and their coherence. Works today.
- The MegaRows toolboxWhat works today and what is coming next, and why nothing is ever uploaded.
Coming soon to MegaRows: CSV to Excel and PDF reports · Compare CSV versions.