The main difference between a B-tree and a B+ tree lies in how they handle data storage and traversal. In a B-tree, data is stored in both internal and leaf nodes, which allows direct access to keys at any level but makes sequential traversal slower. On the other hand, a B+ tree stores data only in the leaf nodes, while internal nodes serve as guides for navigation. This structure makes B+ trees highly efficient for range queries and sequential access because the leaf nodes are linked together, enabling quick in-order traversal. B+ trees are often preferred in database systems for their speed and consistency in handling large datasets.