In my post Row and Page Count Influence on Estimated CPU and I\/O Cost<\/a> I demonstrated how I\/O cost of a clustered index scan had sensitivity to page counts but not row counts.\u00a0 For this post I\u2019ll lay out a direct connection between data page counts and the query execution plan that gets generated.<\/p>\n To illustrate the scenario, I created a table in the Credit database based on the charge table and I added two indexes, one clustered and one nonclustered:<\/p>\n Next, I checked the data page counts by index for this new 575,000 row table:<\/p>\n The clustered index has 3,426 data pages and the nonclustered index has 1,567 data pages.<\/p>\n Next I looked at the execution plan for the following query:<\/p>\n The query execution plan (via SQL Sentry Plan Explorer) was as follows:<\/p>\n \r\nUSE [Credit];\r\nGO\r\n\r\nSELECT TOP 575000\r\n[charge_no],\r\n[member_no],\r\n[provider_no],\r\n[category_no],\r\n[charge_dt],\r\n[charge_amt],\r\n[statement_no],\r\n[charge_code]\r\nINTO [dbo].[charge_demo]\r\nFROM [dbo].[charge];\r\nGO\r\n\r\nCREATE CLUSTERED INDEX [charge_demo_charge_no]\r\nON [dbo].[charge_demo] ([charge_no]);\r\nGO\r\n\r\nCREATE NONCLUSTERED INDEX [charge_demo_charge_amt]\r\nON [dbo].[charge_demo] ([charge_amt])\r\nINCLUDE ([member_no])\r\nWITH (FILLFACTOR = 100);\r\nGO\r\n <\/pre>\n
\r\nSELECT\u00a0 [index_id],\r\n[in_row_data_page_count]\r\nFROM\u00a0\u00a0\u00a0 [sys].[dm_db_partition_stats]\r\nWHERE\u00a0\u00a0 [object_id] = OBJECT_ID('dbo.charge_demo');\r\nGO\r\n<\/pre>\n\r\nSELECT [member_no],\r\nSUM([charge_amt]) AS [charge_amt]\r\nFROM [dbo].[charge_demo]\r\nWHERE [charge_amt] > 0\r\nGROUP BY [member_no]\r\nOPTION (RECOMPILE);\r\nGO\r\n <\/pre>\n