I hope you're doing some locking, otherwise you'll get bitten by concurrency bugs. Example: Say the current maximum is n. Client A's connection performs SELECT MAX() + 1, then, before client A's connection performs an INSERT, client B's connection also does SELECT MAX() + 1. Both clients now think that their insert should be numbered n + 1. The second client to INSERT will either cause a unique constraint violation if you've defined that someColumn should be unique, or you'll get two values. SELECT MAX() also causes more work for the database. Instead of looking up and updating a single value, it has to seek through the index every time. (Speaking as someone who's used this technique in SQL Server.)