40 lines
1.4 KiB
Markdown
40 lines
1.4 KiB
Markdown
|
# SQL
|
||
|
|
||
|
Previously in my fresher time, I rarely write SQL, I always use ORM to wrap SQL.
|
||
|
But time past and too much abstraction bites me.
|
||
|
So I decide to only write SQL from now, no more ORM for me.
|
||
|
But if there is any cool ORM for Go, I guess I try.
|
||
|
|
||
|
This guide is not kind of guide which cover all cases.
|
||
|
Just my little tricks when I work with SQL.
|
||
|
|
||
|
# Stay away from database timestamp
|
||
|
|
||
|
Stay away from all kind of timestamp, timestamp of MySQL or any database.
|
||
|
Just use int64 then pass the timestamp in service layer not database layer.
|
||
|
|
||
|
Why? Because time and date and location are too much complex to handle.
|
||
|
In my business, I use timestamp in milliseconds.
|
||
|
Then I save timestamp as int64 value to database.
|
||
|
Each time I get timestamp from database, I parse to time struct in Go with location or format I want.
|
||
|
No more hassle!
|
||
|
|
||
|
# Use index
|
||
|
|
||
|
You should use index for faster query, but not too much.
|
||
|
Don't create index for every fields in table.
|
||
|
Choose wisely!
|
||
|
|
||
|
For example, create index in MySQL:
|
||
|
|
||
|
```sql
|
||
|
CREATE INDEX `idx_timestamp`
|
||
|
ON `user_upload` (`timestamp`);
|
||
|
```
|
||
|
|
||
|
# Thanks
|
||
|
|
||
|
- [Use The Index, Luke](https://use-the-index-luke.com/)
|
||
|
- [Essential elements of high performance applications: SQL indexes](https://www.foxhound.systems/blog/essential-elements-of-high-performance-sql-indexes/)
|
||
|
- [Things You Should Know About Databases](https://architecturenotes.co/things-you-should-know-about-databases/)
|