SlideShare a Scribd company logo
MYSQL
    Програмист Э.Насанжаргал
MySQL тухай
• 1995 оны 5 сард анх зах зээлд гарсан
• C / C++
• Хөгжүүлэгч нь MySQL AB
• Facebook, Google, Wikipedia …
MySQL versions
MySQL versions
MySQL query бичихэд
анхаарах зүйлс
• Түгээмэл алдаанууд
  • Limit ашиглах
  • Олон давхар Join ашигласан үед бүх баганыг Select хийх
    SELECT * FROM sakila.actor
       INNER JOIN salila.film_actor USING (actor_id)
       INNER JOIN salila.film USING (film_id)
      WHERE sakila.film.title = 'Academy Dinosaur';
MySQL query бичихэд
анхаарах зүйлс
 • Бүх баганыг Select хийх        SELECT *
             • Count(*) => Count(column_name)

 • Unique row
   SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1

 • Order by RAND()
 • ENUM ийг тогтмол тэмдэгттэй vед VARCHAR
Join Decomposition
• SELECT * FROM tag
 JOIN tag_post ON tag_post.tag_id=tag.id
 JOIN post ON tag_post.post_id=post.id
 WHERE tag.tag='mysql';

• SELECT * FROM tag WHERE tag='mysql';
 SELECT * FROM tag_post WHERE tag_id=1234;
 SELECT * FROM post WHERE post.id in
 (123,456,567,9098,8904);
Хэрвээ Join ийг илүү хурдан, ашигтай
ажлуулъя гэвэл
• Query Cache ашиглах
• MyISAM engine – тай хүснэгт ашиглах
• Олон сервер ашиглах
• Join ийг In() солих –   Том хэмжээтэй хүснэгтэнд
Unbuffered query
• mysql_connect("localhost", "php", "alm65z");
   mysql_select_db("phpdb");
   $result = mysql_unbuffered_query("SELECT ID,
 Name FROM conferences;");
    $result = mysql_query("SELECT ID, Name FROM
 conferences;");
   while ($row = mysql_fetch_assoc($result)) {
      extract($row, EXTR_PREFIX_ALL, "conf");
      print "$conf_Namen";
   }
Chopping up a Query
Mysql> DELETE FROM messages WHERE created <
                          DATE_SUB(NOW(),INTERVAL
 3 month)
rows_affected = 0
do{
rows_affected = do_query(

  DELETE FROM messages WHERE created <
    DATE_SUB(NOW(),INTERVAL 3 month) LIMIT 10000
  )
} while rows_affected > 0
Query Cache
// query cache does NOT work
$r = mysql_query("SELECT username FROM user
   WHERE signup_date >= CURDATE()");

// query cache works!
$today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user
   WHERE signup_date >= '$today'");
Index the Search Fields
Mysql> Select count(1) From users Where last_name Like
 ‘a%’; 0.25

Mysql> Alter table ‘users’ Add index(‘last_name’);

Mysql> Select count(1) From users Where last_name Like
 ‘a%’; 0.06
Count == 63285
Index use for Join

SELECT company_name FROM users
  LEFT JOIN companies ON (users.state = companies.state)
  WHERE users.id = 15
 users.state - индекслэгдсэн багана
Procedure Analyse
(max_element, max_memory)
 • SELECT quantity, sale_order_id
  FROM `sale_order_queue`
  PROCEDURE ANALYSE ( 1000000, 256 )
IP Addresses as Unsigned int
 UPDATE users SET ip = INET_ATON
 ('{$_SERVER['REMOTE_ADDR']}') WHERE user_id =15
 192.168.1.100
 INET_NTOA() , ip2long() , long2ip()
Partition
 • CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
  ENGINE=INNODB PARTITION BY HASH( MONTH(tr_date) )
  PARTITIONS 6;

 • Partition type
   • Hash
   • Range
   • List
   • Key
Range
Hash
Key
List
Partition ашиглах
  • CREATE TABLE ts1 (
  •      c1 INT,
  •      c2 VARCHAR(20)
  • )
  • PARTITION BY LIST(c1) (
  •      PARTITION p0 VALUES IN (0, 3, 6),
  •      PARTITION p1 VALUES IN (1, 4, 7),
  •      PARTITION p2 VALUES IN (2, 5, 8)
  • );
  • INSERT INTO ts1 VALUES (8, 'mothra');
  •
               c1              c2
               8               mothra
Анхаарал тавьсанд
    Баярлалаа

More Related Content

PDF
Jquery2
PPT
Wek14 mysql 2
PDF
PDF
Working With Ajax Frameworks
PDF
2017 - NoSQL Vorlesung Mosbach
DOC
PDF
RxSwift 예제로 감잡기
DOCX
Dennis zapana perez
Jquery2
Wek14 mysql 2
Working With Ajax Frameworks
2017 - NoSQL Vorlesung Mosbach
RxSwift 예제로 감잡기
Dennis zapana perez

What's hot (20)

PDF
Simple crudlazarus
TXT
With enter
PDF
Testování prakticky
PDF
Oop koncepti
DOCX
Documentacion edderson callpa_ortiz
DOCX
Simular un next del recordset en php de forma rudimentaria
PDF
Feeds. использование и создание плагинов. Feeds API
PDF
Assalamualaykum warahmatullahi wabarakatuu
TXT
Func
DOCX
Work flowtask
PPT
Юнит тестирование в Zend Framework 2.0
PDF
アプリ設定の保存をシンプルに
DOC
Sumahexavector
PDF
Clase 10 electiva profesional 3 aws rds php y mysql
PDF
DOCX
Php codigos interfaces fredy guzman cusihunca
PDF
PPTX
스프링 JPA 강좌(Spring Data JPA 간단 예제)
PDF
Drupal 8. Movement towards. Susikov Sergey
DOC
Sumahex
Simple crudlazarus
With enter
Testování prakticky
Oop koncepti
Documentacion edderson callpa_ortiz
Simular un next del recordset en php de forma rudimentaria
Feeds. использование и создание плагинов. Feeds API
Assalamualaykum warahmatullahi wabarakatuu
Func
Work flowtask
Юнит тестирование в Zend Framework 2.0
アプリ設定の保存をシンプルに
Sumahexavector
Clase 10 electiva profesional 3 aws rds php y mysql
Php codigos interfaces fredy guzman cusihunca
스프링 JPA 강좌(Spring Data JPA 간단 예제)
Drupal 8. Movement towards. Susikov Sergey
Sumahex
Ad

Viewers also liked (20)

PPT
Day 1
 
PPTX
HTML5
PPTX
Засаг.мн - Төрийн цахим хаалга
PPTX
NodeJS
PPT
Coaching
PPTX
CSS3
PPTX
Java script xэрэглээ
PPT
Computer arch
PPT
Day 3 php working with string, number
 
PPTX
NoSQL өгөгдлийн сан. MongoDB
PPTX
Сүлжээ
PPTX
database 10
PPTX
My sql lec2
 
PPT
Day 4 php working with date and time, array
 
PPT
User account policy
PPTX
Лекц 5
PPTX
database 7-8
PPTX
C++ vndsen oilgolt хичээл 1
PPT
Day 2 php
 
PPTX
Database 6
Day 1
 
HTML5
Засаг.мн - Төрийн цахим хаалга
NodeJS
Coaching
CSS3
Java script xэрэглээ
Computer arch
Day 3 php working with string, number
 
NoSQL өгөгдлийн сан. MongoDB
Сүлжээ
database 10
My sql lec2
 
Day 4 php working with date and time, array
 
User account policy
Лекц 5
database 7-8
C++ vndsen oilgolt хичээл 1
Day 2 php
 
Database 6
Ad

MySQL Э.Насанжаргал

  • 1. MYSQL Програмист Э.Насанжаргал
  • 2. MySQL тухай • 1995 оны 5 сард анх зах зээлд гарсан • C / C++ • Хөгжүүлэгч нь MySQL AB • Facebook, Google, Wikipedia …
  • 5. MySQL query бичихэд анхаарах зүйлс • Түгээмэл алдаанууд • Limit ашиглах • Олон давхар Join ашигласан үед бүх баганыг Select хийх SELECT * FROM sakila.actor INNER JOIN salila.film_actor USING (actor_id) INNER JOIN salila.film USING (film_id) WHERE sakila.film.title = 'Academy Dinosaur';
  • 6. MySQL query бичихэд анхаарах зүйлс • Бүх баганыг Select хийх SELECT * • Count(*) => Count(column_name) • Unique row SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1 • Order by RAND() • ENUM ийг тогтмол тэмдэгттэй vед VARCHAR
  • 7. Join Decomposition • SELECT * FROM tag JOIN tag_post ON tag_post.tag_id=tag.id JOIN post ON tag_post.post_id=post.id WHERE tag.tag='mysql'; • SELECT * FROM tag WHERE tag='mysql'; SELECT * FROM tag_post WHERE tag_id=1234; SELECT * FROM post WHERE post.id in (123,456,567,9098,8904);
  • 8. Хэрвээ Join ийг илүү хурдан, ашигтай ажлуулъя гэвэл • Query Cache ашиглах • MyISAM engine – тай хүснэгт ашиглах • Олон сервер ашиглах • Join ийг In() солих – Том хэмжээтэй хүснэгтэнд
  • 9. Unbuffered query • mysql_connect("localhost", "php", "alm65z"); mysql_select_db("phpdb"); $result = mysql_unbuffered_query("SELECT ID, Name FROM conferences;"); $result = mysql_query("SELECT ID, Name FROM conferences;"); while ($row = mysql_fetch_assoc($result)) { extract($row, EXTR_PREFIX_ALL, "conf"); print "$conf_Namen"; }
  • 10. Chopping up a Query Mysql> DELETE FROM messages WHERE created < DATE_SUB(NOW(),INTERVAL 3 month) rows_affected = 0 do{ rows_affected = do_query( DELETE FROM messages WHERE created < DATE_SUB(NOW(),INTERVAL 3 month) LIMIT 10000 ) } while rows_affected > 0
  • 11. Query Cache // query cache does NOT work $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // query cache works! $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
  • 12. Index the Search Fields Mysql> Select count(1) From users Where last_name Like ‘a%’; 0.25 Mysql> Alter table ‘users’ Add index(‘last_name’); Mysql> Select count(1) From users Where last_name Like ‘a%’; 0.06 Count == 63285
  • 13. Index use for Join SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = 15 users.state - индекслэгдсэн багана
  • 14. Procedure Analyse (max_element, max_memory) • SELECT quantity, sale_order_id FROM `sale_order_queue` PROCEDURE ANALYSE ( 1000000, 256 )
  • 15. IP Addresses as Unsigned int UPDATE users SET ip = INET_ATON ('{$_SERVER['REMOTE_ADDR']}') WHERE user_id =15 192.168.1.100 INET_NTOA() , ip2long() , long2ip()
  • 16. Partition • CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE) ENGINE=INNODB PARTITION BY HASH( MONTH(tr_date) ) PARTITIONS 6; • Partition type • Hash • Range • List • Key
  • 17. Range
  • 18. Hash
  • 19. Key
  • 20. List
  • 21. Partition ашиглах • CREATE TABLE ts1 ( • c1 INT, • c2 VARCHAR(20) • ) • PARTITION BY LIST(c1) ( • PARTITION p0 VALUES IN (0, 3, 6), • PARTITION p1 VALUES IN (1, 4, 7), • PARTITION p2 VALUES IN (2, 5, 8) • ); • INSERT INTO ts1 VALUES (8, 'mothra'); • c1 c2 8 mothra
  • 22. Анхаарал тавьсанд Баярлалаа