The #1 rule is that you shouldn't attempt to display a 10000-row table on a single page using h:dataTable. Or, for that matter, straight HTML. My eyeballs begin to bleed after the first couple of hundred rows.
Related to that, is that
you should avoid fetching large numbers of rows from a database, even if they won't all display on-screen at once.
Basic dataTables with modest amounts of data shouldn't take an excessive amount of time to render, so chances are that something like one of the above issues is at fault. Or, for that matter, if the data requires heavy amounts of back-end computation. Which, by the way, you should NOT do in "getter" routines, since they can be invoked multiple times per page, and thus amplify the insult.
If you do have large amounts of data to chew through, consider using one of the scrollable datatable extensions such as you can get from MyFaces Tomahawk, RichFaces, IceFaces, and other third-party JSF extensions.