B-trees are multi-way tree data structures used to store large datasets, such as an index, that are too large to fit in memory. B-trees reduce the number of disk accesses needed compared to binary trees by allowing nodes to have more than two child nodes. Keys in non-leaf nodes partition the keys in child nodes, all leaves are at the same level, and nodes are kept at least half full. Insertion and deletion may cause nodes to split or merge to maintain these properties.