The game wasn’t pretty, and it won’t be remembered as an example of great sportsmanship. On Sunday the Cardinals saw their NFC West rivals for the first time, realized they couldn’t beat them and the gameplan became “get the Niners riled up and see if we can get one or two of them suspended next week.”

If the 49ers were looking past the Cardinals to the Thanksgiving Day game against Baltimore (get ready to hear the word “Harbowl” more times than you ever thought possible between now and Thursday evening), it wasn’t shown on defense.

Patrick Willis and the rest of that unit, they’re on a mission to become one of the best defensive units not just in the league this season, but in franchise history. Arizona had all of 11 rushing attempts, but their only impressive pass play was on Larry Fitzgerald’s touchdown reception that went through Carlos Rogers’ hands.

The 49ers moved to 9-1, giving the team their first winning record since 2002. Their offense took part in 87 total plays, compared to 48 for the Cardinals. Whenever the Cardinals had the ball it appeared almost as if they were more worried about avoiding injury than competing, and once the Niners took a 23-0 lead in the third quarter the Cardinals spent their time trying to take out their aggression on the 49ers after the whistle.

Early Doucet took a swipe at Dashon Goldson when Goldson was on the ground, not looking. Goldson threw two punches in retaliation and now faces the prospect of being suspended for Thursday’s game against a much tougher opponent on the road. The good news: Goldson’s availability next week was the only thing that was in doubt during this game’s final quarter.

Michael Crabtree and Kyle Williams shine

Crabtree looked like the guy the 49ers expected when they drafted him 10th overall in 2009. 7 catches, 120 yards, and his line should have been closer to 8/150/1 TD with Alex Smith overthrowing him in the end zone when Crabtree was very much open.

Williams caught his second TD of the season, and showed the kind of speed and graceful footwork along the sideline that make you wonder if he’ll be starting alongside Crabtree next season. He only had 5 catches for 54 yards, but it seemed like about twice that many in both categories.

What knee injury?

One of the things that gets lost in this game was the way Frank Gore came back and looked perfectly fine. His average per carry (3.7) wasn’t all that impressive, but the fact that he handled 24 carries was.

Also a positive: Kendall Hunter’s in the middle of a good, consistent rookie season, but Anthony Dixon has risen from a forgotten back to a guy who can contribute some good runs late in games. With a remaining schedule full of NFC West games and the defense the Niners possess, they’re going to need help keeping the clock moving when Gore needs rest.

Halftime adjustments

After a first half where the Niners attempted six field goals and only made three, the Niners scored touchdowns on their first two drives of the second half.

Special teams is more than field goals

Blake Costanzo is a demon on kick coverage and had another massive hit today. If you’re one of those people who likes to wear the jersey of an obscure yet extremely valuable 49er, you could do worse than Costanzo’s No. 51.

One of the 5 turnovers the 49ers collected occurred when they recovered Patrick Peterson’s fumble of an Andy Lee punt. Peterson returned one Lee punt for 12 yards and another for 10, but remember Peterson’s been the best punt returner in the NFL this season with 3 TD.

A few things to clean up

– Tramaine Brock had a few penalties, although he also gained 15 yards for the 49ers on a punt return by allowing his facemask to be mishandled by the opposition.

– Bruce Miller left with a concussion and the team’s blocking suffered overall after Miller left. If Miller isn’t ready by Thursday, do the 49ers possibly reactivate Moran Norris? Probably not, Justin Peelle can probably handle things for a game or two.

– Braylon Edwards dropped a few balls early and it appears jumping isn’t high on his list of priorities. He probably could’ve used at least another week or two of rest before coming back from knee surgery.

Smith’s “game manager” status

Even though Smith only completed 52.6% of his passes, he displayed outstanding touch on a TD pass to Vernon Davis. Also, Smith’s INT was one that shouldn’t bother anyone — he broke free of Darnell Dockett, spun away and ran to his left, and threw a floater across his body into the end zone. It was the kind of play you make if you have confidence that everything’s going to go right no matter what, and that’s not necessarily a bad thing.

Smith had a few balls sail on him, but precision wasn’t exactly required against a fairly poor Arizona team. An area where Smith is excelling is pocket presence. He’s avoiding sacks regularly and gaining yards on the run when he needs to, without taking questionable chances. If he can combine the mobility he showed today with the accuracy he’s shown over the past several weeks leading up to this game, he should be good enough to keep the Niners in the game against the Ravens … at the very least.

A lasting memory

The 49ers will go onto bigger and better things, and the Harbaugh vs. Harbaugh hype starts now. But the Cardinals’ season is effectively over. They’re 3-7, and they’ll trudge toward their plane home in a couple hours as a team in pain. Not just emotionally after another loss during a disappointing season, but physically as well. The Niners have knocked out several running backs this season and have doled out plenty of pain, and the Cardinals looked like they wanted to be anywhere other than on the soggy Candlestick turf from their very first possession. They surely aren’t looking forward to facing San Francisco again in three weeks.

Some may focus on passes overthrown and field goals missed, but the big picture shows a 49ers team that’s steamrolling its way through the league with the game’s best and most physical defense. The next test: beating the team known for having the best and most physical defense in the NFL over the past decade.