3 ms·
If there are Rails developers who work with applications of any size at all and are not familiar with indexes, the problem isn't scaling - it's lack of knowledg
by cscotta 17y ago
If there are Rails developers who work with applications of any size at all and are not familiar with indexes, the problem isn't scaling - it's lack of knowledge of one's application's stack. The mentality that one's app should magically scale without any idea of what's under the hood is toxic.
Anyway, it doesn't get much simpler than: add_index :users, :account_id
- patio11 17y agoRight, but it gets much more complicated. Near trivial example: what index or indices do you need to support the business requirement "I want to know how long users stay active after they sign up, and I want you to be able to slice that data by signup date and by whether they're paying customers or not." So programmer Bob goes off and does this. "Oh, Bob, the screen only lets me slice the data by signup date and by customer type, but I want to slice by both at once." So Bob makes a one line tweak to his controller (to use both conditions, instead of one or the other)... and BOOM, down goes the poor server.
- nostrademons 17y agoEXPLAIN SELECT is your friend. Rails does let you view the SQL it generates, right?
- cscotta 17y agoOh definitely - sorry, I didn't mean to be flippant or to suggest that dropping indexes on everything were some sort of magic scaling powder. I once worked on an app a client brought in from an outside company that had slapped indexes on every single column in the database (including longtext - it was Postgres). I've never seen something so broken. But yeah. It's complicated. "Software is hard." But the best thing you can do is become aware of your ignorance, then try to eliminate what you can.
- Retric 17y agoSuch business requirements often fall under the "I do this 20 times a month not 20 times a second" so they don't need a full index. But, name one of the technology's that "scales" that handles this better than a modern SQL DB.
- mattculbreth 17y agoWell this is a requirement in the Business Intelligence domain, so you should create a reporting database (probably a star schema) and put an analytics package on top of it. You'll get easy sub second queries.