一.優化
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
查看MySQL 時區: show variables like ‘%time_zone%’;