SlideShare a Scribd company logo
新生訓練
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

More Related Content

PDF
PPTX
Mysql 高级优化之 逻辑处理
PDF
Ch10 教學
PDF
Spark 巨量資料處理基礎教學
PDF
Ch7 教學
PDF
PDF
PDF
Ch12 教學
Mysql 高级优化之 逻辑处理
Ch10 教學
Spark 巨量資料處理基礎教學
Ch7 教學
Ch12 教學

What's hot (12)

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

Similar to Mysql簡易教學 (20)

PDF
sql-intro
PPT
MySQL進階介紹
PDF
Excel函數應用課程
PDF
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
PPT
MySQL入門介紹
PPT
Sql 學習繪本
PPT
PHP
PDF
Mysql开发与优化
PPTX
SQL 語言簡介
PDF
資料庫入門 Part2
PDF
MySQL資料表正規化草稿
PDF
第十一章解答
PPT
Excel函數進階班(北市政府公訓處) 2
PPTX
My sql explain & select
PDF
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
PPTX
Hadoop hive
PDF
資料庫40題強化演練.pdf
PDF
改善Programmer生活的sql技能
PDF
Oracle SQL 1 Day Tutorial
PPT
資料庫應用與實際操作
sql-intro
MySQL進階介紹
Excel函數應用課程
Servlet & JSP 教學手冊第二版 - 第 9 章:整合資料庫
MySQL入門介紹
Sql 學習繪本
PHP
Mysql开发与优化
SQL 語言簡介
資料庫入門 Part2
MySQL資料表正規化草稿
第十一章解答
Excel函數進階班(北市政府公訓處) 2
My sql explain & select
Spring 2.0 技術手冊第六章 - Hibernate 與 Spring
Hadoop hive
資料庫40題強化演練.pdf
改善Programmer生活的sql技能
Oracle SQL 1 Day Tutorial
資料庫應用與實際操作
Ad

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

Editor's Notes

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