Mysql 查詢優化,排序,特殊使用等-年度總結
一.優化
1.資料表聯查優化
1.先執行where過濾,再聯查;
2.合適的組合索引,
3.欄位值:
1)儘量使用數字型別
2)設定預設值,避免where使用欄位 = null;
4.慎用某些關鍵字/字元(in,!=,*),適當使用exists/not exists;
2.limit的優化
普通:
SELECT * FROM table1 WHERE `key` >1000000 LIMIT 100000,5;
內聯 :a表內聯-臨時表(使用a表 limit得出的結果集)
SELECT * FROM table1 a
INNER JOIN (SELECT `key` AS id FROM table1 WHERE `key` >1000000 LIMIT 100000,5 ) b ON a.`key` = b .id;
3.排序優化:
1)儘量使用索引的正序排序,不單獨使用order by
2)使用索引排序時:組合索引-結合where欄位的索引和排序欄位索引
二.查詢結果集排序的序號
SELECT @rank:=@rank + 1 AS rank_no //@rank 臨時變數,@rank:=@rank + 1 初始值+1
FROM
(SELECT 表字段 FROM 表名 ORDER BY `key` DESC ) a,//結果集排序
(SELECT @rank:= 0) b//臨時變數初始值
三.其他
1.指定一個自增主鍵的初始值
alter table tbname auto_increment = x;
2.lpad((str,len,padstr))
用字串 padstr對 str進行左邊填補直至它的長度達到 len個字元長度,然後返回str,如果str的長度長於len,那麼它將被截除到len個字元;
3.給定一個日期,返回一個天數
TO_DAYS(date)
4.判斷某個欄位的值是否包含指定的字串
INSTR(filed,字串)
5.replace into : 已有此行資料(根據主鍵或者唯一索引判斷)替換
6.java專案中mysql jar包升級6.0 後需修改資料來源配置
1.<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
2.url 多加時區配置 serverTimezone=GMT%2B8