在數據庫表設計方面:
在設計數據庫的時候我們總要設計一些冗餘字段~~爲啥呢?
我自己猜的~~
有一些查詢,冗餘字段可以幫助我們不需要去聯多表查詢~~
於是乎你就可以做一些冗餘字段了 ~~ 比如說評論數量
雖然說評論數量是可以從評論表裏算出來的(在評論時做個觸發器也不錯,少查詢一個表)
~~~
設置刪除狀態字段:
儘量少用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%’