如何更好的寫數據庫?如何數據庫語句優化?

在數據庫表設計方面:

在設計數據庫的時候我們總要設計一些冗餘字段~~爲啥呢?

我自己猜的~~

有一些查詢,冗餘字段可以幫助我們不需要去聯多表查詢~~

於是乎你就可以做一些冗餘字段了 ~~ 比如說評論數量

雖然說評論數量是可以從評論表裏算出來的(在評論時做個觸發器也不錯,少查詢一個表)

~~~

設置刪除狀態字段:

儘量少用delete語句~~這個語句在操作的時候會鎖表~~以後直接用update

況且如果使用這個語句也會對數據產生一些問題~~還是不要刪了

~~~~~~~

字段上面最好不要用null做默認值~~

~~~~~

做合理的索引~大量的索引只會似的插入數據緩慢

~~~~

類型字段建議採用tinyint

字符類型如下解釋

varchar內存佔用率小

char效率高(固定大小的字符串最好用這個存)

主鍵大部分都喜歡用 int~~估計大家都沒有過 無符號的int(因爲主鍵是非負數~~用這個的話主鍵量可以達到2倍~~~23333333)

~~~~

mysql和redis結合:

舉個栗子:

比如說點贊~~~這個是個頻繁的操作~~頻繁的有好多點贊狂~~2333333

把在redis中存儲點贊信息:

返回json時再和文章數據做整合~~效率提高數倍

~~~~

嘗試對一些經常不動的數據進行緩存處理~~

----------------------

在數據庫語句方面:

在使用select語句的時候儘量多些字段,如果用*的話效率好低地說

查詢數量的時候 儘量使用 count(1)這種樣子

查詢一條語句的時候最好在後面加上 limit 1 這樣的話數據庫查詢到一條的話就停止了

~~~~~~

如何進行快速插入呢?

insert into user(name) values(‘m’);

insert into user(name) values(‘n’);

拼接成如下語句

insert into user(name) values(‘m’), (‘n’);

效率會翻好幾倍

~~~~~~~

如果能用inner join儘量使用~~這個效率最高

--------如下是看別人的博客裏的-------

在查詢的時候儘量不要用到 null判斷 這樣會導致數據庫不用索引~去全表掃描~~效率很低~~

應儘量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃描~~~

應儘量避免在 where 子句中使用 or 來連接條件,如果一個字段有索引,一個字段沒有索引,將導致引擎放棄使用索引而進行全表掃描~~~

select id from t where num=10 or Name = 'admin'

可以這樣查詢:

select id from t where num = 10 union all select id from t where Name = 'admin'

in 和 not in 也要慎用,否則會導致全表掃描,如:

select id from t where num in(1,2,3)

對於連續的數值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

很多時候用 exists 代替 in 是一個好的選擇:

select num from a where num in(select num from b)

用下面的語句替換:

select num from a where exists(select 1 from b where num=a.num)

下面的查詢也將導致全表掃描:

select id from t where name like ‘%abc%’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章