如何更好的寫資料庫?如何資料庫語句優化?

2021-09-24 21:39:24 字數 1674 閱讀 8895

在資料庫表設計方面:

在設計資料庫的時候我們總要設計一些冗餘字段~~為啥呢?

我自己猜的~~

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

設定刪除狀態字段:

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

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

字段上面最好不要用null做預設值~~

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

型別字段建議採用tinyint

字元型別如下解釋

varchar記憶體佔用率小

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

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%』

資料庫如何優化

1.程式優化,用 prepareedstatement 進行增刪改查 2.程式優化,盡量批量處理,避免逐條處理,減小 io數 3.查詢結果不要用 來查詢所有字段,要明確指明結果字段 4.減少多表連線數,盡量少的表進行連線 5.表連線時,盡量用主鍵進行連線或用唯一索引 6.表的查詢多時,一定建立索引 ...

如何優化資料庫?提高資料庫的效能

1.對語句的優化 用程式中,保證在實現功能的基礎上,儘量減少對資料庫的訪問次數 通過搜尋引數,儘量減少對錶的訪問行數,最小化結果集,從而減輕網路負擔 能夠分開的操作盡量分開處理,提高每次的響應速度 在資料視窗使用sql時,盡量把使用 的索引放在選擇的首列 演算法的結構盡量簡單 在查詢時,不要過多地使...

如何寫資料庫表的SQL ?

現有a b c三個表 主鍵都是snum,現要實現刪除a表中某個記錄 比如snum為1的記錄 如何級聯刪除b c表中snum為1的記錄?如果b,c表的snum是參照a的snum,那麼b,c兩張表要加入下面的級聯sql,不然在是無法刪除a,b,c表的記錄的 alter table b add const...