一、sql中使用正則表達式
select name,email from user where email Regexp "@163[.,]com$";
sql語句中使用Regexp對性能影響較大。
二、使用Rand()函數獲取隨機數據
rand();隨機數函數
1、隨機排序 mysql> select * from hello order by rand();
2、隨機列抽取3條 mysql> select * from hello order by rand() limit 3;
三、使用group by 分組語句后面跟with rollup 關鍵字,可以統計出更多的信息。(with rollup后不能再使用order by)

四、外鍵
表B1中的一個普通的列是另一個表B2的主鍵,如果B2表中的一條記錄刪除那表B1中關聯該主鍵值的列也應該刪除。
不建議使用外鍵,在使用的時候要注意。
mysql中的Innodb存儲引擎支持外鍵。
五、使用 ? % 查看幫助手冊
? create 、? opti% 、? contents 、? functions
mysql優化
一、sql語句如何性能分析
1、查詢數據庫各種sql類型語句的執行情況。
show [session | global ] status :了解數據庫中各種sql的執行頻率
session:表示查詢當前建立連接以來各種SQL的執行頻率
global:表示自數據庫啟動以來各種SQL的執行頻率
一般我們主要查詢這些信息:
com_xxx :表示每個xxx語句的執行次數,該方式可以查看mysql任何存儲引擎的sql語句執行次數記錄。
show GLOBAL status like "com_select%"; // 查看sql 中select語句的執行次數
show GLOBAL status like "com_insert%"; // 查看sql 中insert語句的執行次數
show GLOBAL status like "com_update%"; // 查看sql 中update語句的執行次數
show GLOBAL status like "com_delete%";// 查看sql 中delete語句的執行次數
對於存儲引擎為InnoDB:該方式查詢的記錄數是計算你每次SQL操作數據的行數。(例如:delete from hello where id <=10 該語句刪除了10條記錄,那么Innodb_rows_deleted=10)

mysql> show status like 'connections'; 查看mysql的連接量(無論一次連接是否成功)
mysql> show status like 'uptime'; 查看mysql工作時間 單位秒
2、關於mysql慢查詢
a、查看mysql慢查詢狀態

- slow_query_log :是否開啟慢查詢日志,1表示開啟,0表示關閉。
- log_slow_queries :舊版(5.6以下版本)MySQL數據庫慢查詢日志存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log
- slow_query_log_file:新版(5.6及以上版本)MySQL數據庫慢查詢日志存儲路徑。可以不設置該參數,系統則會默認給一個缺省的文件host_name-slow.log 查看慢查詢日志位置:mysql> show variables like 'slow_query%';
- 開啟慢查詢:提供了全局變量slow_query_log、slow_query_log_file可以靈活地控制enable/disable慢查詢,該方式不必重啟服務器, set global slow_query_log=1開啟了慢查詢日志只對當前數據庫生效,如果MySQL重啟后則會失效。如果要永久生效,就必須修改配置文件my.cnf

b、慢查詢時間(秒):會將select 語句執行時間超過10秒的sql記錄到慢查詢日志中

設置慢查詢時間 mysql> set global long_query_time =1;
注意:使用命令 set global long_query_time=1修改后,需要重新連接或新開一個會話才能看到修改值。你用show variables like 'long_query_time'查看是當前會話的變量值,你也可以不用重新連接會話,而是用show global variables like 'long_query_time';
3、慢查詢日志分析
1、查看一共執行過幾次慢查詢:

結果: 超過1秒即為慢查詢,一共有2條慢查詢
2、查看這些慢查詢sql
打開慢查詢日志文件 DESKTOP-GGLOGPK-slow.log

- Query_time SQL執行的時間,越長則越慢
- Lock_time 在MySQL服務器階段(不是在存儲引擎階段)等待表鎖時間
- Rows_sent 查詢返回的行數
- Rows_examined 查詢檢查的行數
在這里可以記錄每次慢查詢的sql語句。
3、使用 desc 與explain 定位分析sql


