Ever since pages got added to WordPress in version 1.5, wp_list_pages has been the way to get a list of pages. In the pre-widgets era, it used to be coded into pretty much every theme’s sidebar or header to generate the site’s menu.
Nowadays wp_list_pages is at the heart of the Pages widget, and it’s perfect for blog-type sites with a modest number of pages. But if you’re using WordPress as a CMS, and most of your content is written as pages, using wp_list_pages can cause serious performance issues.
More Taming wp_list_pages