Advertisement
Guest User

SQL

a guest
Jan 15th, 2023
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 8.55 KB | None | 0 0
  1. DROP DATABASE tag_test;
  2. CREATE DATABASE tag_test;
  3. USE tag_test;
  4.  
  5. CREATE TABLE tag(
  6. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  7. description VARCHAR(1000));
  8.  
  9. CREATE TABLE content(
  10. id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  11. description VARCHAR(1000));
  12.  
  13. CREATE TABLE tag_content_rel(
  14. rel_id INT PRIMARY KEY AUTO_INCREMENT,
  15. tag_id INT NOT NULL,
  16. content_id INT NOT NULL);
  17.  
  18. CREATE INDEX tag_content_rel_index ON tag_content_rel(tag_id, content_id);
  19.  
  20. -- CREATE INDEX tag_index ON tag_content_rel(tag_id);
  21. CREATE INDEX content_index ON tag_content_rel(content_id);
  22.  
  23. DELIMITER $$
  24. CREATE PROCEDURE `add_tag`(IN n INT)
  25. BEGIN
  26.     DECLARE i INT UNSIGNED DEFAULT 0;
  27.     WHILE i < n DO
  28.         INSERT INTO `tag`()
  29.         VALUES
  30.         -- 一次插入多行可以显著加快插入速度。
  31.         (),(),(),(),(),(),(),(),(),(),
  32.         (),(),(),(),(),(),(),(),(),(),
  33.         (),(),(),(),(),(),(),(),(),(),
  34.         (),(),(),(),(),(),(),(),(),(),
  35.         (),(),(),(),(),(),(),(),(),(),
  36.         (),(),(),(),(),(),(),(),(),(),
  37.         (),(),(),(),(),(),(),(),(),(),
  38.         (),(),(),(),(),(),(),(),(),(),
  39.         (),(),(),(),(),(),(),(),(),(),
  40.         (),(),(),(),(),(),(),(),(),();
  41.         SET i = i + 1;
  42.     END WHILE;
  43. END $$
  44. DELIMITER ;
  45.  
  46. DELIMITER $$
  47. CREATE PROCEDURE `add_content`(IN n INT)
  48. BEGIN
  49.     DECLARE i INT UNSIGNED DEFAULT 0;
  50.     WHILE i < n DO
  51.         INSERT INTO `content`()
  52.         VALUES
  53.         (),(),(),(),(),(),(),(),(),(),
  54.         (),(),(),(),(),(),(),(),(),(),
  55.         (),(),(),(),(),(),(),(),(),(),
  56.         (),(),(),(),(),(),(),(),(),(),
  57.         (),(),(),(),(),(),(),(),(),(),
  58.         (),(),(),(),(),(),(),(),(),(),
  59.         (),(),(),(),(),(),(),(),(),(),
  60.         (),(),(),(),(),(),(),(),(),(),
  61.         (),(),(),(),(),(),(),(),(),(),
  62.         (),(),(),(),(),(),(),(),(),();
  63.         SET i = i + 1;
  64.     END WHILE;
  65. END $$
  66. DELIMITER ;
  67.  
  68. DELIMITER $$
  69. CREATE PROCEDURE `add_tag_content_rel`(IN n INT, IN tag_count INT, IN content_count INT)
  70. BEGIN
  71.     DECLARE i INT UNSIGNED DEFAULT 0;
  72.     WHILE i < n DO
  73.         INSERT INTO `tag_content_rel`(tag_id, content_id)
  74.         VALUES
  75.         -- 为了不学 MySQL 的过程的语法所以才复制粘贴这么多次。
  76.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  77.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  78.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  79.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  80.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  81.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  82.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  83.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  84.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),
  85.         (FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count)),(FLOOR(RAND()*tag_count), FLOOR(RAND()*content_count));
  86.         SET i = i + 1;
  87.     END WHILE;
  88. END $$
  89. DELIMITER ;
  90.  
  91. CALL add_tag(1000);
  92. CALL add_content(1000);
  93. CALL add_tag_content_rel(100000, 100000, 100000);
  94.  
  95. -- 耗时 00:04:40.9
  96.  
  97. -- 使用下面的语句获取某个 content 的所有 tag:
  98. USE tag_test;
  99.  
  100. SELECT *
  101. FROM tag_content_rel
  102. WHERE content_id = 50000;
  103.  
  104. -- 然后使用上面那条语句获取的 tag_id 修改下面的语句:
  105.  
  106. USE tag_test;
  107.  
  108. SELECT content_id, COUNT(*)
  109. FROM tag_content_rel
  110. USE INDEX(tag_content_rel_index)
  111. WHERE tag_id IN (
  112. 74097,36293,32597,45665,69924,42073,3844,52738,97224,31397,5446,50339,7489,4153,10688,18796,61802,61934,64280,48422,67511,34606,74402,14939,56910,23882,63452,5273,72271,25664,32101,98346,76611,32674,68923,66303,75038,18239,53693,52185,92531,90051,65825,63719,51141,78243,91453,87551,36030,10445,67367,71868,90933,45010,90762,94204,47964,54863,85144,47911,97501,27354,84274,26607,17689,47092,8397,48070,54266,40221,51098,25623,45015,57871,90732,52866,13103,70145,83931,76962,14663,54249,71576,73313,55536,21321,89844,80231,92971,18815,26451,19336,59254,57524,35275,40903,86684,72234,8368,77221,5672,62121,58058,63069
  113. )
  114. GROUP BY content_id
  115. ORDER BY COUNT(*) DESC;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement