SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
新生訓練
8/20 - MySQL


                                        講者 :黃健瑋


                高速網路實驗室
         High Speed Network Group Lab
Database & table




高速網路實驗室
High Speed Network Group Lab        2
Variable

                int
                       4 byte

                smallint
                       2 byte
                tinyint
                       1 byte
                bigint
                       8 byte

高速網路實驗室
High Speed Network Group Lab     3
Variable

                char
                       固定長度
                varchar
                       儲存內容長度可變動
                       長度還是不能亂給! (temporary table)
                           
                               盡量不要超過 170
                ‘a’ 和’我’在 char(varchar) 裡都只佔一格
                text
                       長度較長的,例如文章內容
                       資料不存在 table 裡
高速網路實驗室
High Speed Network Group Lab                          4
Variable

                假如要表達’是’和’否’,該用 ??
                       bool or tinyint or char(1)?




高速網路實驗室
High Speed Network Group Lab                          5
Variable

                enum(‘y’,’n’) 最快 !!
                Speed: enum(‘y’,’n’) > char(1) > bool = tinyint(1)




高速網路實驗室
High Speed Network Group Lab                                          6
Variable

                datetime
                       年月日時秒
                date
                       幾月幾號請用這個
                timestamp
                       當下時間


                錯誤例子
                       選課結束日期用 datetime ,且只輸入年月日
                           
                               now() 和 datetime 比較會有錯
高速網路實驗室
High Speed Network Group Lab                            7
Query

                查詢            SELECT
                新增            INSERT INTO
                刪除            DELETE FROM
                修改            UPDATE SET




高速網路實驗室
High Speed Network Group Lab                 8
Query
                查詢 SELECT
                       SELECT 欄位 1, 欄位 2 FROM 表 WHERE
                       SELECT * FROM 表 WHERE
                           
                               欄位 = ‘ 資料’ AND 欄位 = ‘ 資料’


                盡量只取自己要的欄位




高速網路實驗室
High Speed Network Group Lab                               9
Query

                錯誤例子
                   SELECT b FROM table WHERE a=‘a’
                   ……
                   SELECT c FROM table WHERE a=‘a’
                   ……
                   SELECT d FROM table WHERE a=‘a’
                修正
                   SELECT b, c, d FROM table WHERE a=‘a’



高速網路實驗室
High Speed Network Group Lab                               10
Query

                course
                       name, propery
                teacher_course
                       course_name, teacher
                取出某個老師的課程 ?
                       使用 join(inner join) !
                       SELECT C2.course_name FROM course AS C1,
                        teacher_course AS C2 WHERE C2.teacher = ‘tom’ AND
                        C1.name = C2.course_name


高速網路實驗室
High Speed Network Group Lab                                                11
Query

                如果要從課程表中取出多個不同性質的課程名稱
                 ?
                       SELECT name FROM course WHERE property = ‘a’ OR
                        property = ‘b’ OR property = ‘c’ ……
                       ?




高速網路實驗室
High Speed Network Group Lab                                          12
Query

                較好的寫法
                       SELECT name FROM course WHERE property IN (‘a’,
                        ‘b’, ‘c’, ……)




高速網路實驗室
High Speed Network Group Lab                                              13
Query

                如果要取得課程表中修課人數最多的課名 ?

                如果只是取出課程表中最多的修課人數 ?
                       用 MAX() 函式
                       SELECT MAX(number) FROM course




高速網路實驗室
High Speed Network Group Lab                             14
Query

                較好的寫法
                       SELECT name FROM course WHERE number =
                        (SELECT MAX(number) FROM course)
                                           OR
                       SELECT name FROM course AS C1, (SELECT
                        MAX(number) AS max_number FROM course) AS C2
                        WHERE C1.number = C2.max_number
                錯誤寫法
                SELECT name FROM course WHERE number IN (SELECT
                 MAX(number) FROM course)

高速網路實驗室
High Speed Network Group Lab                                           15
Query

                怎麼取課程表內各個性質裡最多的人數?
                   SELECT MAX(number) WHERE property = ‘a’
                   SELECT MAX(number) WHERE property = ‘b’
                   SELECT MAX(number) WHERE property = ‘c’
                   ……




高速網路實驗室
High Speed Network Group Lab                                 16
Query

                較好的寫法
                       SELECT MAX(number) GROUP BY property




高速網路實驗室
High Speed Network Group Lab                                   17
     Group by & distinct




高速網路實驗室
High Speed Network Group Lab           18
Query

                新增 INSERT INTO
                       INSERT INTO 資料表
                        ( 欄位 1, 欄位 2, 欄位 3) VALUES (‘1’, ‘2’, ‘3’)
                       INSERT INTO 資料表
                        ( 欄位 1, 欄位 2, 欄位 3) VALUES (‘1’, ‘2’, ‘3’), (‘4’,
                        ‘5’, ‘6’)




高速網路實驗室
High Speed Network Group Lab                                                19
Query

                刪除 DELETE FROM
                       DELETE FROM 資料表
                           
                               所有資料列都刪掉,資料表還在
                       DELETE FROM 資料表
                        WHERE 欄位 = ‘ 資料’
                              符合條件的資料列
                       可以先用 SELECT 看會刪到什麼資料




高速網路實驗室
High Speed Network Group Lab                    20
Query

                刪除性質是’ a’ 的課程
                       DELETE FROM course WHERE property = ‘a’
                檢查
                       SELECT * FROM course WHERE property = ‘a’




高速網路實驗室
High Speed Network Group Lab                                        21
Query

                修改 UPDATE SET
                       UPDATE 資料表 SET
                        欄位 1 = ‘ 資料’ , 欄位 2 = ‘ 資料’ , 欄位 3 = ‘ 資料’
                        WHERE 欄位 = ‘ 資料’




高速網路實驗室
High Speed Network Group Lab                                         22
Index

                索引種類
                       Primary key: 唯一,不可為 NULL 的索引
                       Unique: 唯一,可為 NULL 的索引
                       Index: 一般索引


                索引對照的問題
                       Ex: primay key(name, property, online, number)
                       SELECT * FROM course WHERE name = ‘a’ AND
                        online = ‘y’ AND number = ‘5’

高速網路實驗室
High Speed Network Group Lab                                             23
EXPLAIN

                EXPLAIN
                       觀察 query 下的好不好的指令
                       Ex: EXPLAIN SELECT * FROM course WHERE name =
                        ‘a’;




高速網路實驗室
High Speed Network Group Lab                                        24
EXPLAIN

                重點
                       Rows
                           
                               掃了多少行
                       Type
                           
                               const > eq_ref > ref > range > ALL (Performance)
                       Key
                              用到的索引是哪個




高速網路實驗室
High Speed Network Group Lab                                                      25
EXPLAIN

                範例 ( 行數不滿意、 key 沒完全對到 )




高速網路實驗室
High Speed Network Group Lab               26
    範例




高速網路實驗室
High Speed Network Group Lab   27
Temporary Tables

                When create?
                       ORDER BY + GROUP BY
                       DISTINCT combined with ORDER BY
                When in disk?
                       table include ‘BLOB’ or ‘TEXT’
                       any column in a GROUP BY or DISTINCT clause larger
                        than 512 bytes




高速網路實驗室
High Speed Network Group Lab                                                 28
DB 效能

                MySQL 參數設定
                       參數值並不是越大越好
                       一些參數值該如何設定 ?
                           
                               參考 16 上的 wiki


                可用的工具
                       mysqltuner.pl
                       Tuning-primer.sh



高速網路實驗室
High Speed Network Group Lab                   29

Weitere ähnliche Inhalte

Was ist angesagt?

淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011Yiwei Ma
 
初學R語言的60分鐘
初學R語言的60分鐘初學R語言的60分鐘
初學R語言的60分鐘Chen-Pan Liao
 
Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行nigel889
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL正中 周
 
那些年,我們一起看的例外
那些年,我們一起看的例外那些年,我們一起看的例外
那些年,我們一起看的例外kao kuo-tung
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。勇浩 赖
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習孜羲 顏
 
程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號鍾誠 陳鍾誠
 

Was ist angesagt? (12)

淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
 
R intro 20140716-basic
R intro 20140716-basicR intro 20140716-basic
R intro 20140716-basic
 
Ch8 教學
Ch8 教學Ch8 教學
Ch8 教學
 
Ch7 範例
Ch7 範例Ch7 範例
Ch7 範例
 
初學R語言的60分鐘
初學R語言的60分鐘初學R語言的60分鐘
初學R語言的60分鐘
 
Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行Mysql 高级优化之 理解查询执行
Mysql 高级优化之 理解查询执行
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL
 
那些年,我們一起看的例外
那些年,我們一起看的例外那些年,我們一起看的例外
那些年,我們一起看的例外
 
Ch10
Ch10Ch10
Ch10
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
 
MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習MapReduce 簡單介紹與練習
MapReduce 簡單介紹與練習
 
程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號程式人雜誌 -- 2014 年11月號
程式人雜誌 -- 2014 年11月號
 

Ähnlich wie Mysql簡易教學

《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)jane2006
 
Big Query
Big QueryBig Query
Big QueryNCUDSC
 
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...彼得潘 Pan
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)Yan Li
 
Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序HO-HSUN LIN
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Wade Huang
 
上海立派信息技术有限公司
上海立派信息技术有限公司上海立派信息技术有限公司
上海立派信息技术有限公司yiditushe
 
淘宝前端优化
淘宝前端优化淘宝前端优化
淘宝前端优化锐 张
 
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC
 
香港六合彩
香港六合彩香港六合彩
香港六合彩aaveow
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 

Ähnlich wie Mysql簡易教學 (17)

Sun java
Sun javaSun java
Sun java
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
Big Query
Big QueryBig Query
Big Query
 
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
Standford 2015 iOS讀書會 week2: 1. Applying MVC 2. More Swift and Foundation Fra...
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
 
Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序Net Parallel Programming .NET平行處理與執行序
Net Parallel Programming .NET平行處理與執行序
 
Scala
ScalaScala
Scala
 
Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享Nhibernate+sqlite測試實戰經驗分享
Nhibernate+sqlite測試實戰經驗分享
 
上海立派信息技术有限公司
上海立派信息技术有限公司上海立派信息技术有限公司
上海立派信息技术有限公司
 
淘宝前端优化
淘宝前端优化淘宝前端优化
淘宝前端优化
 
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning ServicestwMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
twMVC#46_SQL Server 資料分析大躍進 Machine Learning Services
 
Linq 入门
Linq 入门Linq 入门
Linq 入门
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
ev2oik
ev2oikev2oik
ev2oik
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 

Mysql簡易教學

  • 1. 新生訓練 8/20 - MySQL 講者 :黃健瑋 高速網路實驗室 High Speed Network Group Lab
  • 3. Variable  int  4 byte  smallint  2 byte  tinyint  1 byte  bigint  8 byte 高速網路實驗室 High Speed Network Group Lab 3
  • 4. Variable  char  固定長度  varchar  儲存內容長度可變動  長度還是不能亂給! (temporary table)  盡量不要超過 170  ‘a’ 和’我’在 char(varchar) 裡都只佔一格  text  長度較長的,例如文章內容  資料不存在 table 裡 高速網路實驗室 High Speed Network Group Lab 4
  • 5. Variable  假如要表達’是’和’否’,該用 ??  bool or tinyint or char(1)? 高速網路實驗室 High Speed Network Group Lab 5
  • 6. Variable  enum(‘y’,’n’) 最快 !!  Speed: enum(‘y’,’n’) > char(1) > bool = tinyint(1) 高速網路實驗室 High Speed Network Group Lab 6
  • 7. Variable  datetime  年月日時秒  date  幾月幾號請用這個  timestamp  當下時間  錯誤例子  選課結束日期用 datetime ,且只輸入年月日  now() 和 datetime 比較會有錯 高速網路實驗室 High Speed Network Group Lab 7
  • 8. Query  查詢 SELECT  新增 INSERT INTO  刪除 DELETE FROM  修改 UPDATE SET 高速網路實驗室 High Speed Network Group Lab 8
  • 9. Query  查詢 SELECT  SELECT 欄位 1, 欄位 2 FROM 表 WHERE  SELECT * FROM 表 WHERE  欄位 = ‘ 資料’ AND 欄位 = ‘ 資料’  盡量只取自己要的欄位 高速網路實驗室 High Speed Network Group Lab 9
  • 10. Query  錯誤例子 SELECT b FROM table WHERE a=‘a’ …… SELECT c FROM table WHERE a=‘a’ …… SELECT d FROM table WHERE a=‘a’  修正 SELECT b, c, d FROM table WHERE a=‘a’ 高速網路實驗室 High Speed Network Group Lab 10
  • 11. Query  course  name, propery  teacher_course  course_name, teacher  取出某個老師的課程 ?  使用 join(inner join) !  SELECT C2.course_name FROM course AS C1, teacher_course AS C2 WHERE C2.teacher = ‘tom’ AND C1.name = C2.course_name 高速網路實驗室 High Speed Network Group Lab 11
  • 12. Query  如果要從課程表中取出多個不同性質的課程名稱 ?  SELECT name FROM course WHERE property = ‘a’ OR property = ‘b’ OR property = ‘c’ ……  ? 高速網路實驗室 High Speed Network Group Lab 12
  • 13. Query  較好的寫法  SELECT name FROM course WHERE property IN (‘a’, ‘b’, ‘c’, ……) 高速網路實驗室 High Speed Network Group Lab 13
  • 14. Query  如果要取得課程表中修課人數最多的課名 ?  如果只是取出課程表中最多的修課人數 ?  用 MAX() 函式  SELECT MAX(number) FROM course 高速網路實驗室 High Speed Network Group Lab 14
  • 15. Query  較好的寫法  SELECT name FROM course WHERE number = (SELECT MAX(number) FROM course) OR  SELECT name FROM course AS C1, (SELECT MAX(number) AS max_number FROM course) AS C2 WHERE C1.number = C2.max_number  錯誤寫法  SELECT name FROM course WHERE number IN (SELECT MAX(number) FROM course) 高速網路實驗室 High Speed Network Group Lab 15
  • 16. Query  怎麼取課程表內各個性質裡最多的人數? SELECT MAX(number) WHERE property = ‘a’ SELECT MAX(number) WHERE property = ‘b’ SELECT MAX(number) WHERE property = ‘c’ …… 高速網路實驗室 High Speed Network Group Lab 16
  • 17. Query  較好的寫法  SELECT MAX(number) GROUP BY property 高速網路實驗室 High Speed Network Group Lab 17
  • 18. Group by & distinct 高速網路實驗室 High Speed Network Group Lab 18
  • 19. Query  新增 INSERT INTO  INSERT INTO 資料表 ( 欄位 1, 欄位 2, 欄位 3) VALUES (‘1’, ‘2’, ‘3’)  INSERT INTO 資料表 ( 欄位 1, 欄位 2, 欄位 3) VALUES (‘1’, ‘2’, ‘3’), (‘4’, ‘5’, ‘6’) 高速網路實驗室 High Speed Network Group Lab 19
  • 20. Query  刪除 DELETE FROM  DELETE FROM 資料表  所有資料列都刪掉,資料表還在  DELETE FROM 資料表 WHERE 欄位 = ‘ 資料’  符合條件的資料列  可以先用 SELECT 看會刪到什麼資料 高速網路實驗室 High Speed Network Group Lab 20
  • 21. Query  刪除性質是’ a’ 的課程  DELETE FROM course WHERE property = ‘a’  檢查  SELECT * FROM course WHERE property = ‘a’ 高速網路實驗室 High Speed Network Group Lab 21
  • 22. Query  修改 UPDATE SET  UPDATE 資料表 SET 欄位 1 = ‘ 資料’ , 欄位 2 = ‘ 資料’ , 欄位 3 = ‘ 資料’ WHERE 欄位 = ‘ 資料’ 高速網路實驗室 High Speed Network Group Lab 22
  • 23. Index  索引種類  Primary key: 唯一,不可為 NULL 的索引  Unique: 唯一,可為 NULL 的索引  Index: 一般索引  索引對照的問題  Ex: primay key(name, property, online, number)  SELECT * FROM course WHERE name = ‘a’ AND online = ‘y’ AND number = ‘5’ 高速網路實驗室 High Speed Network Group Lab 23
  • 24. EXPLAIN  EXPLAIN  觀察 query 下的好不好的指令  Ex: EXPLAIN SELECT * FROM course WHERE name = ‘a’; 高速網路實驗室 High Speed Network Group Lab 24
  • 25. EXPLAIN  重點  Rows  掃了多少行  Type  const > eq_ref > ref > range > ALL (Performance)  Key  用到的索引是哪個 高速網路實驗室 High Speed Network Group Lab 25
  • 26. EXPLAIN  範例 ( 行數不滿意、 key 沒完全對到 ) 高速網路實驗室 High Speed Network Group Lab 26
  • 27. 範例 高速網路實驗室 High Speed Network Group Lab 27
  • 28. Temporary Tables  When create?  ORDER BY + GROUP BY  DISTINCT combined with ORDER BY  When in disk?  table include ‘BLOB’ or ‘TEXT’  any column in a GROUP BY or DISTINCT clause larger than 512 bytes 高速網路實驗室 High Speed Network Group Lab 28
  • 29. DB 效能  MySQL 參數設定  參數值並不是越大越好  一些參數值該如何設定 ?  參考 16 上的 wiki  可用的工具  mysqltuner.pl  Tuning-primer.sh 高速網路實驗室 High Speed Network Group Lab 29

Hinweis der Redaktion

  1. http://stackoverflow.com/questions/2023476/which-is-faster-char1-or-tinyint1-why
  2. 雖然用的是 primary key 可是只有部分用到
  3. http://dev.mysql.com/doc/refman/5.0/en/internal-temporary-tables.html