ÌØ±ðÊÇÔÚ´¦Àíʵʱ»ò½üʵʱÊý¾Ýʱ£¬Äܹ»¿ìËÙ׼ȷµØ´ÓMySQLÊý¾Ý¿âÖÐÌáÈ¡¹ýȥһСʱµÄÊý¾Ý£¬¶ÔÓÚ¼à¿Ø¡¢ÈÕÖ¾·ÖÎö¡¢ÒµÎñ±¨±íÉú³ÉµÈ¶àÖÖÓ¦Óó¡¾°¶¼¾ßÓм«ÆäÖØÒªµÄÒâÒå
±¾ÎĽ«ÉîÈë̽ÌÖÈçºÎÔÚMySQLÖÐʵÏÖÕâһĿ±ê£¬Í¨¹ýÀíÂÛ½²½â¡¢²éѯÓÅ»¯²ßÂÔ¼°ÊµÕ½°¸Àý·ÖÎö£¬°ïÖúÄúÕÆÎÕÕâÒ»¹Ø¼ü¼¼ÄÜ
Ò»¡¢Àí½âʱ¼ä´ÁÓëÈÕÆÚº¯Êý ÔÚMySQLÖд¦Àíʱ¼äÏà¹ØµÄ²éѯ£¬Ê×ÏÈÐèÒªÊìϤÈÕÆÚºÍʱ¼äº¯Êý
MySQLÌṩÁËÒ»Ì׷ḻµÄÈÕÆÚºÍʱ¼ä´¦Àíº¯Êý£¬Ê¹µÃÎÒÃÇÄܹ»¸ù¾ÝÐèÒª¶Ôʱ¼äÊý¾Ý½øÐмӼõ¡¢¸ñʽ»¯¡¢±È½ÏµÈ²Ù×÷
¶ÔÓÚ¡°È¡Ç°Ò»Ð¡Ê±¡±µÄÐèÇ󣬺ËÐÄÔÚÓÚÄܹ»È·¶¨µ±Ç°Ê±¼ä£¬²¢´ÓÖмõȥһСʱ£¬È»ºóÀûÓÃÕâ¸öʱ¼ä·¶Î§½øÐвéѯ
-NOW()£º·µ»Øµ±Ç°µÄÈÕÆÚºÍʱ¼ä
-DATE_SUB()£º´ÓÖ¸¶¨ÈÕÆÚ¼õÈ¥Ò»¸öʱ¼ä¼ä¸ô
-INTERVAL£º¶¨Òåʱ¼ä¼ä¸ôµÄµ¥Î»£¬ÈçÃ루SECOND£©¡¢·ÖÖÓ£¨MINUTE£©¡¢Ð¡Ê±£¨HOUR£©µÈ
-UNIX_TIMESTAMP()£º½«ÈÕÆÚ»òʱ¼äת»»ÎªUNIXʱ¼ä´Á
-FROM_UNIXTIME()£º½«UNIXʱ¼ä´Áת»»ÎªÈÕÆÚ»òʱ¼ä¸ñʽ
¶þ¡¢¹¹½¨²éѯ£ºÈ¡Ç°Ò»Ð¡Ê±µÄÊý¾Ý ¼ÙÉèÎÒÃÇÓÐÒ»¸öÃûΪ`logs`µÄ±í£¬ÓÃÓڼǼÓû§µÄ²Ù×÷ÈÕÖ¾£¬ÆäÖаüÀ¨Ò»¸öÃûΪ`log_time`µÄ×ֶΣ¬¸Ã×ֶδ洢ÿÌõÈÕÖ¾¼Ç¼µÄʱ¼ä´Á
ÎÒÃǵÄÄ¿±êÊDzéѯ¹ýȥһСʱÄÚµÄËùÓÐÈÕÖ¾¼Ç¼
2.1 »ù±¾²éѯ Ò»¸ö»ù´¡µÄ²éѯÓï¾ä¿ÉÄÜÈçÏÂËùʾ£º sql SELECT FROM logs WHERE log_time >= NOW() - INTERVAL1 HOUR; ÕâÌõSQLÓï¾äµÄÂß¼·Ç³£Ö±¹Û£ºËüʹÓÃ`NOW()`º¯Êý»ñÈ¡µ±Ç°Ê±¼ä£¬È»ºóͨ¹ý`INTERVAL1 HOUR`¼õȥһСʱ£¬×îÖÕɸѡ³ö`log_time`×Ö¶ÎÖµÔÚÕâ¸öʱ¼ä·¶Î§ÄÚµÄËùÓмǼ
2.2 ¿¼ÂÇÊ±Çø ÖµµÃ×¢ÒâµÄÊÇ£¬`NOW()`º¯Êý·µ»ØµÄÊÇ·þÎñÆ÷µÄµ±Ç°Ê±¼äºÍÊ±Çø
Èç¹ûÄúµÄÓ¦ÓóÌÐò»òÊý¾Ý¿â·þÎñÆ÷ÉèÖÃÔÚ²»Í¬µÄÊ±Çø£¬ÕâÒ»µãÓÈÎªÖØÒª
Èç¹ûÐèÒª´¦ÀíÌØ¶¨Ê±ÇøµÄʱ¼ä£¬¿ÉÒÔʹÓÃ`CONVERT_TZ()`º¯ÊýÀ´×ª»»Ê±Çø
sql SELECT FROM logs WHERE log_time >= CONVERT_TZ(NOW(), @@session.time_zone, +00:00) - INTERVAL1 HOUR; ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇÊ×ÏȽ«`NOW()`·µ»ØµÄʱ¼äת»»ÎªUTCÊ±Çø£¨`+00:00`£©£¬È»ºóÔÙ¼õȥһСʱ
µ±È»£¬ÕâÀïµÄ`+00:00`Ó¦¸ÃÌæ»»ÎªÄú¹ØÐĵľßÌåÊ±Çø
Èý¡¢²éѯÓÅ»¯²ßÂÔ ¾¡¹ÜÉÏÊö²éѯÔÚ´ó¶àÊýÇé¿ö϶¼ÄÜÂú×ãÐèÇ󣬵«ÔÚÃæ¶Ôº£Á¿Êý¾Ýʱ£¬ÐÔÄÜÎÊÌâ¿ÉÄÜ»á³ÉΪƿ¾±
ÒÔÏÂÊÇһЩÓÅ»¯²ßÂÔ£¬°ïÖúÄúÌáÉý²éѯЧÂÊ
3.1Ë÷ÒýÓÅ»¯ È·±£`log_time`×Ö¶ÎÉÏÓÐË÷ÒýÊÇÌáÉý²éѯÐÔÄܵĹؼü
Ë÷Òý¿ÉÒÔ¼«´óµØ¼Ó¿ìÊý¾Ý¼ìË÷ËÙ¶È£¬ÓÈÆäÊÇÔÚ´¦Àí´óÁ¿Êý¾Ýʱ
sql CREATE INDEX idx_log_time ON logs(log_time); ´´½¨Ë÷Òýºó£¬MySQLÄܹ»¸ü¿ìµØ¶¨Î»µ½·ûºÏʱ¼äÌõ¼þµÄÊý¾ÝÐУ¬¼õÉÙÈ«±íɨÃèµÄ¿ªÏú
3.2 ·ÖÇø±í ¶ÔÓÚÈÕÖ¾ÀàÊý¾Ý£¬ÆäÌØµãÊÇÊý¾ÝÁ¿ËæÊ±¼ä¿ìËÙÔö³¤£¬ÇÒ²éѯÍùÍù»ùÓÚʱ¼ä·¶Î§
Õâʱ£¬¿ÉÒÔ¿¼ÂÇʹÓ÷ÖÇø±íÀ´¹ÜÀíÊý¾Ý
°´Ê±¼ä·ÖÇø¿ÉÒÔʹµÃMySQL½öɨÃè°üº¬ËùÐèÊý¾ÝµÄ·ÖÇø£¬½øÒ»²½¼õÉÙI/O²Ù×÷
sql ALTER TABLE logs PARTITION BY RANGE(YEAR(log_time) - 10000 + MONTH(log_time) 100 + DAY(log_time))( PARTITION p0 VALUES LESS THAN(20230101), PARTITION p1 VALUES LESS THAN(20230102), -- ¸ü¶à·ÖÇø¸ù¾ÝÐèÒª¶¨Òå ); ×¢Ò⣬·ÖÇø²ßÂÔÓ¦¸ù¾Ýʵ¼ÊÊý¾ÝÁ¿ºÍ²éѯģʽÁé»îµ÷Õû
3.3 ²éѯ»º´æ ËäÈ»MySQLµÄ²éѯ»º´æ×ÔMySQL8.0ÆðÒѱ»·ÏÆú£¬µ«ÔÚÔçÆÚ°æ±¾ÖУ¬ºÏÀíÀûÓòéѯ»º´æ¿ÉÒÔÏÔÖø¼Ó¿ìÖØ¸´²éѯµÄËÙ¶È
¶ÔÓÚÆµ·±Ö´ÐеÄÀàËÆ²éѯ£¬¿ÉÒÔ¿¼ÂÇÔÚÓ¦ÓòãÃæÊµÏÖ»º´æ»úÖÆ
ËÄ¡¢ÊµÕ½°¸Àý·ÖÎö ΪÁ˸üºÃµØÀí½âÈçºÎ½«ÉÏÊöÀíÂÛÓ¦ÓÃÓÚʵ¼Ê³¡¾°£¬ÒÔÏÂÊÇÒ»¸ö»ùÓÚµçÉÌÆ½Ì¨µÄÈÕÖ¾·ÖÎö°¸Àý
4.1 °¸Àý±³¾° ¼ÙÉèÎÒÃÇÓÐÒ»¸öµçÉÌÆ½Ì¨£¬ÐèҪʵʱ¼à¿Ø¹ýȥһСʱÄÚµÄÓû§ÐÐΪÈÕÖ¾£¬ÒÔ±ã¿ìËÙÏìӦϵͳÒì³£¡¢·ÖÎöÓû§»îÔ¾¶ÈµÈ
ÈÕÖ¾±íÖаüº¬Óû§ID¡¢²Ù×÷ÀàÐÍ¡¢²Ù×÷ʱ¼äµÈÐÅÏ¢
4.2 ±í½á¹¹Éè¼Æ sql CREATE TABLE user_logs( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, action_type VARCHAR(50), log_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 4.3 ²éѯʵÏÖ ¿¼Âǵ½Ê±ÇøÒòËØºÍÐÔÄÜÓÅ»¯£¬ÎÒÃǵIJéѯÓï¾ä¿ÉÄÜÈçÏ£º sql SELECT user_id, action_type, FROM_UNIXTIME(UNIX_TIMESTAMP(log_time)) AS formatted_log_time FROM user_logs WHERE log_time >= CONVERT_TZ(NOW(), @@session.time_zone, +08:00) - INTERVAL1 HOUR ORDER BY log_time DESC; ÕâÀÎÒÃǽ«Ê±¼äת»»Îª±±¾©Ê±¼ä£¨`+08:00`£©£¬²¢ÇÒΪÁ˿ɶÁÐÔ£¬½«`log_time`¸ñʽ»¯Îª¸üÒ×¶ÁµÄ×Ö·û´®¸ñʽ
ͬʱ£¬Í¨¹ý`ORDER BY log_time DESC`È·±£½á¹û°´Ê±¼äµ¹ÐòÅÅÁÐ
4.4 ½á¹û·ÖÎö Ö´ÐÐÉÏÊö²éѯºó£¬ÎÒÃÇ¿ÉÒԵõ½¹ýȥһСʱÄÚµÄÓû§ÐÐΪÈÕÖ¾£¬°üÀ¨Óû§ID¡¢²Ù×÷ÀàÐÍÒÔ¼°¾ßÌåµÄ²Ù×÷ʱ¼ä
»ùÓÚÕâЩÊý¾Ý£¬¿ÉÒÔ½øÒ»²½·ÖÎöÓû§»îÔ¾¶È¡¢ÈÈÃŲÙ×÷ÀàÐ͵ÈÐÅÏ¢£¬ÎªÔËÓª¾ö²ßÌṩ֧³Ö
Îå¡¢×Ü½á ´ÓMySQLÖиßЧÌáÈ¡¹ýȥһСʱµÄÊý¾Ý£¬²»½öÊÇÊý¾Ý¿â¹ÜÀíµÄ»ù±¾¼¼ÄÜ£¬Ò²ÊÇÊý¾Ý·ÖÎö¡¢ÊµÊ±¼à¿ØµÈÁìÓò²»¿É»òȱµÄÄÜÁ¦
ͨ¹ýÀí½âMySQLµÄÈÕÆÚºÍʱ¼äº¯Êý£¬¹¹½¨ºÏÀíµÄ²éѯÓï¾ä£¬½áºÏË÷ÒýÓÅ»¯¡¢·ÖÇø±í²ßÂÔÒÔ¼°Ó¦ÓòãÃæµÄ»º´æ»úÖÆ£¬ÎÒÃÇ¿ÉÒÔÏÔÖøÌáÉý²éѯÐÔÄÜ£¬Âú×ã¸÷ÖÖ¸´ÔÓÓ¦Óó¡¾°µÄÐèÇó
ÎÞÂÛÊǵçÉÌÆ½Ì¨ÈÕÖ¾·ÖÎö¡¢ÏµÍ³¼à¿Ø±¨¾¯£¬»¹ÊÇÒµÎñ±¨±íÉú³É£¬ÕÆÎÕÕâÒ»¼¼Äܶ¼½«ÎªÄúµÄ¹¤×÷´øÀ´¼«´óµÄ±ãÀûºÍ¼ÛÖµ
Ï£Íû±¾ÎĵÄÄÚÈÝÄܹ»°ïÖúÄú¸üºÃµØÀí½âºÍÓ¦ÓÃÕâÒ»¼¼Êõ£¬ÊµÏÖ¸ü¸ßЧµÄÊý¾Ý¹ÜÀíºÍ·ÖÎö