1. 程式人生 > 遊戲 >新一批國產遊戲版號下發 84款均為手遊

新一批國產遊戲版號下發 84款均為手遊

技術標籤:Java

1、儘量不要留null

select id from t where num is null,可以,但儘量不要留null,null也佔空間;使用not null填充資料庫,像varchar(100)這種變長欄位可以設定預設值為0,確保列中沒有null值,查詢select id from where num=0。

意思就是資料表中一個欄位的長度不要設定成null;即便沒有值,值的長度可以設定成0。

2、以小查大

如:select * from admin left join log on admin.admin_id = log.admin_id where log.admin_id>10;

解釋:這是兩張表關聯【admin表、log表】

此時就是查詢admin表和log表內,當log.admin_id>10時,admin.admin_id = log.admin_id的所有資料;

很明顯log.admin_id>10這個條件比較明確,範圍小,先查它;

所以可以優化為:

select * from (select * from admin where admin_id>10) T1 left join log on T1.admin_id = log.admin_id

解釋:使用 JOIN 時候,應該用小的結果驅動大的結果(left join 左邊表結果儘量小如果有條件應該放到左邊先處理,

right join 同理反向),同時儘量把牽涉到多表聯合的查詢拆分多個 query(多個連表查詢效率低,容易到之後鎖表和阻塞)。

3、 limit 的基數比較大時使用

例如:select * from admin order by admin_id limit 100000,10;

解釋:這是查詢admin這張表admin_id從100000開始查,查10條的資料。

但是,limit在資料庫是從頭開始依次往後查,查的時候找到第100000條,再往後查10條。

優化為:select * from admin where admin_id between 100000 and 100010 order by admin_id;

解釋:加上between and就是確定了admin_id的範圍是(100000-100010),所以查的比較快一點。

4、儘量避免在列上做運算,這樣導致索引失效

例如:select * from admin where year(admin_time)>2020

解釋:這是查詢admin表的year這個屬性,查詢有哪些資訊的年份大於2020年。

優化為:select * from admin where admin_time> '2020-01-01′

解釋:這個語句直接查詢了dmin表裡的admin_time> '2020-01-01′的所有資訊,更加的準確。

MYSQL索引型別

MYSQL索引有四種PRIMARY、INDEX、UNIQUE、FULLTEXT, 其中PRIMARY、INDEX、UNIQUE是一類,FULLTEXT是一類。

PRIMARY:主鍵索引。索引列唯一且不能為空;一張表只能有一個主鍵索引(主鍵索引通常在建表的時候就指定)

NORMAL:普通索引。索引列沒有任何限制;

UNIQUE:唯一索引。索引列的值必須是唯一的,但允許有空;

FULLTEXT:全文搜尋的索引。FULLTEXT 用於搜尋很長一篇文章的時候,效果最好

備註:好些還沒搞懂,也是一知半解的,以後繼續整理。有想法可以寫在評論區。