I’ve inherited the task of maintaining a very poorly-coded e-commerce site and I’m working on refactoring a lot of the code and trying to fix ongoing bugs.
Every database insert (adding an item to cart, etc.) begins with a grab_new_id function which COUNTs the number of rows in the table, then, starting with that number, querys the database to find an unused index number. In addition to being terrible performance-wise (there are 40,000+ rows already, and indexes are regularly deleted, so sometimes it takes several seconds just to find a new id) this breaks regularly when two operations are preformed simultaneously, as two entries are added with duplicate id numbers.
This seems idiotic to me – why not just use auto-increment on the index field? I’ve tested it both ways, and adding rows to the table without specifying an index id is (obviously) many times faster. My question is: can anyone think of any reason the original programmer might have done this? Is there some school of thought where auto_increment is somehow considered bad form? Are there databases that don’t have auto-increment capabilities?
I’ve seen this before from someone that didn’t know that feature existed. Definitely use the auto-increment feature.
Some people take the “roll your own” approach to everything, often because they haven’t taken the time to see if that is an available feature or if someone else had already come up with it. You’ll often see crazy workarounds or poor performing/fragile code from these people. Inheriting a bad database is no fun at all, good luck!