Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
MySQL¸ß¼¶ÖªÊ¶-²éѯÓëË÷ÒýÓÅ»¯·ÖÎö
 
À´Ô´£º¼òÊé ·¢²¼ÓÚ£º 2017-11-21
  1736  次浏览      29
 

ÐÔÄÜϽµSQLÂý¡¢Ö´ÐÐʱ¼ä³¤¡¢µÈ´ýʱ¼ä³¤

  • ²éѯÓï¾äдµÄÀÃ
  • Ë÷ÒýʧЧ
    • µ¥ÖµË÷Òý
    • ¸´ºÏË÷Òý
  • ¹ØÁª²éѯ̫¶àjoin£¨Éè¼ÆÈ±ÏÝ»ò²»µÃÒѵÄÐèÇ󣬳ý·ÇÄãÄܸɵĹýÄãµÄ²úÆ·¾­Àí£©
  • ·þÎñÆ÷µ÷Óż°¸÷¸ö²ÎÊýÉèÖ㨻º³å¡¢Ïß³ÌÊýµÈ£©

³£¼ûͨÓõÄJoin²éѯ

SQLÖ´ÐÐ˳Ðò

ÊÖд

ÊÖдSQL˳Ðò

SELECT DISTINCT
<select_list>
FROM
<left_table> <join_type>
JOIN <right_table> ON <join_condition>
WHERE
<where_condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
ORDER BY
<order_by_condition>
LIMIT <limit_number>

»ú¶Á£¨MySQL¶Áȡ˳Ðò£©

»ú¶Á˳Ðò

FROM
<left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE
<where_condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
SELECT DISTINCT
<select_list>
ORDER BY
<order_by_condition>
LIMIT <limit_number>

×ܽá-SQL½âÎö˳Ðò

SQL½âÎö

SQL JOINs

ÆßÖÖJOINͼ½â

ʵÑ飺

-- ½¨±íºÍÊý¾ÝSQL
CREATE TABLE `tbl_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`deptName` VARCHAR(30) DEFAULT NULL,
`locAdd` VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `tbl_emp` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`deptId` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_dept_id` (`deptId`)
#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `tbl_dept` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);

Á·Ï°

1¡¢A¡¢BÁ½±í¹²ÓÐ

select * from tbl_emp a inner join tbl_dept b on a.deptId = b.id;

2¡¢A¡¢BÁ½±í¹²ÓÐ+AµÄ¶ÀÓÐ

select * from tbl_emp a left join tbl_dept b on a.deptId = b.id

3¡¢A¡¢BÁ½±í¹²ÓÐ+BµÄ¶ÀÓÐ

select * from tbl_emp a right join tbl_dept b on a.deptId = b.id;

4¡¢AµÄ¶ÀÓÐ

select * from tbl_emp a left join tbl_dept b on a.deptId = b.id where b.id is null;

5¡¢BµÄ¶ÀÓÐ

select * from tbl_emp a right join tbl_dept b on a.deptId = b.id where a.deptId is null;

6¡¢ABÈ«ÓÐ

MySQL Full JoinµÄʵÏÖ ÒòΪMySQL²»Ö§³ÖFULL JOIN,ÏÂÃæÊÇÌæ´ú·½·¨

left join + union(¿ÉÈ¥³ýÖØ¸´Êý¾Ý)+ right join

ʵÏÖÈçÏÂÃæ´úÂë

7¡¢AµÄ¶ÀÓÐ + BµÄ¶ÀÓÐ

-- 6¡¢ABÈ«ÓÐ
SELECT *
FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id
UNION
SELECT *
FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id;
-- 7¡¢AµÄ¶ÀÓÐ + BµÄ¶ÀÓÐ
SELECT *
FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id
WHERE b.id IS NULL
UNION
SELECT *
FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id
WHERE a.`deptId` IS NULL;

Ë÷Òý¼ò½é

ʲôÊÇË÷Òý

MySQL¹Ù·½¶ÔË÷ÒýµÄ¶¨ÒåΪ£ºË÷Òý£¨Index£©ÊǰïÖúMySQL¸ßЧ»ñÈ¡Êý¾ÝµÄÊý¾Ý½á¹¹¡£

  • ¿ÉÒԵõ½Ë÷ÒýµÄ±¾ÖÊ£ºË÷ÒýÊÇÊý¾Ý½á¹¹¡£
  • Ë÷ÒýµÄÄ¿µÄÔÚÓÚÌá¸ß²éѯЧÂÊ£¬¿ÉÒÔÀà±È×ֵ䣬
  • Èç¹ûÒª²é¡°mysql¡±Õâ¸öµ¥´Ê£¬ÎÒÃǿ϶¨ÐèÒª¶¨Î»µ½m×Öĸ£¬È»ºó´ÓÏÂÍùÏÂÕÒµ½y×Öĸ£¬ÔÙÕÒµ½Ê£ÏµÄsql¡£
  • Èç¹ûûÓÐË÷Òý£¬ÄÇôÄã¿ÉÄÜÐèÒªa----z£¬Èç¹ûÎÒÏëÕÒµ½Java¿ªÍ·µÄµ¥´ÊÄØ£¿»òÕßOracle¿ªÍ·µÄµ¥´ÊÄØ£¿
  • ÊDz»ÊǾõµÃÈç¹ûûÓÐË÷Òý£¬Õâ¸öÊÂÇé¸ù±¾ÎÞ·¨Íê³É£¿

Äã¿ÉÒÔ¼òµ¥Àí½âΪ¡°ÅźÃÐòµÄ¿ìËÙ²éÕҽṹ¡±

  • ÔÚÊý¾ÝÖ®Í⣬Êý¾Ý¿âϵͳ»¹Î¬»¤×ÅÂú×ãÌØ¶¨²éÕÒËã·¨µÄÊý¾Ý½á¹¹£¬ÕâЩÊý¾Ý½á¹¹ÒÔijÖÖ·½Ê½ÒýÓã¨Ö¸Ïò£©Êý¾Ý£¬ÕâÑù¾Í¿ÉÒÔÔÚÕâЩÊý¾Ý½á¹¹ÉÏʵÏָ߼¶²éÕÒËã·¨¡£ÕâÖÖÊý¾Ý½á¹¹£¬¾ÍÊÇË÷Òý¡£
  • ÏÂͼ¾ÍÊÇÒ»ÖÖ¿ÉÄܵÄË÷Òý·½Ê½Ê¾Àý£º

  • ΪÁ˼ӿìCol2µÄ²éÕÒ£¬¿ÉÒÔά»¤Ò»¸öÓÒ±ßËùʾµÄ¶þ²æ²éÕÒÊ÷£¬Ã¿¸ö½Úµã·Ö±ð°üº¬Ë÷Òý¼üÖµºÍÒ»¸öÖ¸Ïò¶ÔÓ¦Êý¾Ý¼Ç¼ÎïÀíµØÖ·µÄÖ¸Õ룬ÕâÑù¾Í¿ÉÒÔÔËÓöþ²æ²éÕÒÔÚÒ»¶¨µÄ¸´ÔÓ¶ÈÄÚ»ñÈ¡µ½ÏàÓ¦Êý¾Ý£¬´Ó¶ø¿ìËٵļìË÷³ö·ûºÏÌõ¼þµÄ¼Ç¼¡£

Ò»°ãÀ´ËµË÷Òý±¾ÉíÒ²ºÜ´ó£¬²»¿ÉÄÜÈ«²¿´æ´¢ÔÚÄÚ´æÖУ¬Òò´ËË÷ÒýÍùÍùÒÔË÷ÒýÎļþµÄÐÎʽ´æ´¢µÄ´ÅÅÌÉÏ

ÎÒÃÇÆ½³£Ëù˵µÄË÷Òý£¬Èç¹ûûÓÐÌØ±ðÖ¸Ã÷£¬¶¼ÊÇÖ¸B+Ê÷½á¹¹×éÖ¯µÄË÷Òý¡£ÆäÖоۼ¯Ë÷Òý£¬´ÎÒªË÷Òý£¬¸²¸ÇË÷Òý£¬¸´ºÏË÷Òý£¬Ç°×ºË÷Òý£¬Î¨Ò»Ë÷ÒýĬÈ϶¼ÊÇʹÓÃB+Ê÷Ë÷Òý£¬Í³³ÆË÷Òý¡£µ±È»£¬³ýÁËB+Ê÷ÕâÖÖÀàÐ͵ÄË÷ÒýÖ®Í⣬»¹ÓйþÏ¡Ë÷Òý(hash index)µÈ¡£

Ë÷ÒýµÄÓÅÊÆ

ÀàËÆ´óѧͼÊé¹Ý½¨ÊéÄ¿Ë÷Òý£¬Ìá¸ßÊý¾Ý¼ìË÷µÄЧÂÊ£¬½µµÍÊý¾Ý¿âµÄIO³É±¾

ͨ¹ýË÷ÒýÁжÔÊý¾Ý½øÐÐÅÅÐò£¬½µµÍÊý¾ÝÅÅÐòµÄ³É±¾£¬½µµÍÁËCPUµÄÏûºÄ

Ë÷ÒýµÄÁÓÊÆ

ʵ¼ÊÉÏË÷ÒýÒ²ÊÇÒ»ÕÅ±í£¬¸Ã±í±£´æÁËÖ÷¼üÓëË÷Òý×ֶΣ¬²¢Ö¸ÏòʵÌå±íµÄ¼Ç¼£¬ËùÒÔË÷ÒýÁÐÒ²ÊÇÒªÕ¼ÓÿռäµÄ

ËäÈ»Ë÷Òý´ó´óÌá¸ßÁ˲éѯËÙ¶È£¬Í¬Ê±È´»á½µµÍ¸üбíµÄËÙ¶È£¬Èç¶Ô±í½øÐÐINSERT¡¢UPDATEºÍDELETE¡£ÒòΪ¸üбíʱ£¬MySQL²»½öÒª±£´æÊý¾Ý£¬»¹Òª±£´æÒ»ÏÂË÷ÒýÎļþÿ´Î¸üÐÂÌí¼ÓÁËË÷ÒýÁеÄ×ֶΣ¬¶¼»áµ÷ÕûÒòΪ¸üÐÂËù´øÀ´µÄ¼üÖµ±ä»¯ºóµÄË÷ÒýÐÅÏ¢

Ë÷ÒýÖ»ÊÇÌá¸ßЧÂʵÄÒ»¸öÒòËØ£¬Èç¹ûÄãµÄMySQLÓдóÊý¾ÝÁ¿µÄ±í£¬¾ÍÐèÒª»¨Ê±¼äÑо¿½¨Á¢×îÓÅÐãµÄË÷Òý£¬»òÓÅ»¯²éѯÓï¾ä

MySQLË÷Òý·ÖÀà

µ¥ÖµË÷Òý

¼´Ò»¸öË÷ÒýÖ»°üº¬µ¥¸öÁУ¬Ò»¸ö±í¿ÉÒÔÓжà¸öµ¥ÁÐË÷Òý

ΨһË÷Òý

Ë÷ÒýÁеÄÖµ±ØÐëΨһ£¬µ«ÔÊÐíÓпÕÖµ

¸´ºÏË÷Òý

¼´Ò»¸öË÷°üº¬¶à¸öÁÐ

»ù±¾Óï·¨

´´½¨£¬Á½ÖÖ·½Ê½

CREATE [UNIQUE ] INDEX indexName ON mytable(columnname(length));

Èç¹ûÊÇCHAR£¬VARCHARÀàÐÍ£¬length ¿ÉÒÔСÓÚ×Ö¶Îʵ¼Ê³¤¶È£»

Èç¹ûÊÇ BLOB ºÍ TEXT ÀàÐÍ£¬±ØÐëÖ¸¶¨ length¡£

ALTER mytable ADD [UNIQUE ] INDEX [indexName] ON (columnname(length))

ɾ³ý

DROP INDEX [indexName] ON mytable;

²é¿´

SHOW INDEX FROM table_name\G

ʹÓÃAlter ÃüÁî

ÓÐËÄÖÖ·½Ê½À´Ìí¼ÓÊý¾Ý±íµÄË÷Òý£º

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list)

¸ÃÓï¾äÌí¼ÓÒ»¸öÖ÷¼ü£¬ÕâÒâζ×ÅË÷ÒýÖµ±ØÐëÊÇΨһµÄ£¬ÇÒ²»ÄÜΪNULL¡£

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)

ÕâÌõÓï¾ä´´½¨Ë÷ÒýµÄÖµ±ØÐëÊÇΨһµÄ£¨³ýÁËNULLÍ⣬NULL¿ÉÄÜ»á³öÏÖ¶à´Î£©¡£

ALTER TABLE tbl_name ADD INDEX index_name (column_list)

Ìí¼ÓÆÕͨË÷Òý£¬Ë÷ÒýÖµ¿É³öÏÖ¶à´Î¡£

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list)

¸ÃÓï¾äÖ¸¶¨ÁËË÷ÒýΪ FULLTEXT £¬ÓÃÓÚÈ«ÎÄË÷Òý¡£

MySQLË÷Òý½á¹¹

BTreeË÷Òý

¼ìË÷Ô­Àí

  • ¡¾³õʼ»¯½éÉÜ¡¿

Ò»¿Åb+Ê÷£¬Ç³À¶É«µÄ¿éÎÒÃdzÆÖ®ÎªÒ»¸ö´ÅÅ̿飬¿ÉÒÔ¿´µ½Ã¿¸ö´ÅÅÌ¿é°üº¬¼¸¸öÊý¾ÝÏÉîÀ¶É«Ëùʾ£©ºÍÖ¸Õ루»ÆÉ«Ëùʾ£©£¬Èç´ÅÅÌ¿é1°üº¬Êý¾ÝÏî17ºÍ35£¬°üº¬Ö¸ÕëP1¡¢P2¡¢P3¡£ P1±íʾСÓÚ17µÄ´ÅÅ̿飬P2±íʾÔÚ17ºÍ35Ö®¼äµÄ´ÅÅ̿飬P3±íʾ´óÓÚ35µÄ´ÅÅ̿顣

ÕæÊµµÄÊý¾Ý´æÔÚÓÚÒ¶×ӽڵ㼴 3¡¢5¡¢9¡¢10¡¢13¡¢15¡¢28¡¢29¡¢36¡¢60¡¢75¡¢79¡¢90¡¢99¡£

·ÇÒ¶×Ó½ÚµãÖ»²»´æ´¢ÕæÊµµÄÊý¾Ý£¬Ö»´æ´¢Ö¸ÒýËÑË÷·½ÏòµÄÊý¾ÝÏÈç17¡¢35²¢²»ÕæÊµ´æÔÚÓÚÊý¾Ý±íÖС£

  • ¡¾²éÕÒ¹ý³Ì¡¿

Èç¹ûÒª²éÕÒÊý¾ÝÏî29£¬ÄÇôÊ×ÏÈ»á°Ñ´ÅÅÌ¿é1ÓÉ´ÅÅ̼ÓÔØµ½Äڴ棬´Ëʱ·¢ÉúÒ»´ÎIO£¬ÔÚÄÚ´æÖÐÓöþ·Ö²éÕÒÈ·¶¨29ÔÚ17ºÍ35Ö®¼ä£¬Ëø¶¨´ÅÅÌ¿é1µÄP2Ö¸Õ룬ÄÚ´æÊ±¼äÒòΪ·Ç³£¶Ì£¨Ïà±È´ÅÅ̵ÄIO£©¿ÉÒÔºöÂÔ²»¼Æ£¬Í¨¹ý´ÅÅÌ¿é1µÄP2Ö¸ÕëµÄ´ÅÅ̵ØÖ·°Ñ´ÅÅÌ¿é3ÓÉ´ÅÅ̼ÓÔØµ½Äڴ棬·¢ÉúµÚ¶þ´ÎIO£¬29ÔÚ26ºÍ30Ö®¼ä£¬Ëø¶¨´ÅÅÌ¿é3µÄP2Ö¸Õ룬ͨ¹ýÖ¸Õë¼ÓÔØ´ÅÅÌ¿é8µ½Äڴ棬·¢ÉúµÚÈý´ÎIO£¬Í¬Ê±ÄÚ´æÖÐ×ö¶þ·Ö²éÕÒÕÒµ½29£¬½áÊø²éѯ£¬×ܼÆÈý´ÎIO¡£
ÕæÊµµÄÇé¿öÊÇ£¬3²ãµÄb+Ê÷¿ÉÒÔ±íʾÉϰÙÍòµÄÊý¾Ý£¬Èç¹ûÉϰÙÍòµÄÊý¾Ý²éÕÒÖ»ÐèÒªÈý´ÎIO£¬ÐÔÄÜÌá¸ß½«ÊǾ޴óµÄ£¬Èç¹ûûÓÐË÷Òý£¬Ã¿¸öÊý¾ÝÏî¶¼Òª·¢ÉúÒ»´ÎIO£¬ÄÇô×ܹ²ÐèÒª°ÙÍò´ÎµÄIO£¬ÏÔÈ»³É±¾·Ç³£·Ç³£¸ß¡£

   
1736 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ