国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql多表,隨機查詢優(yōu)化方案

2019-11-02 14:26:54
字體:
供稿:網(wǎng)友

  我以前介紹過最多的就是單表隨機查詢時的優(yōu)化了,今天 看到一站長分享了一個多表隨機查詢優(yōu)化的一些方法與方案,下面我們就一起來看看吧.

  本文主要談論如何實現(xiàn)Mysql的隨機查詢,多表隨機查詢。在Mysql中隨機取出一條記錄的實現(xiàn)方法。

  我們通常的查詢是沒有where或者where fields>2這樣的方式,這樣只能取出在某種條件下的一條或多條,如果條件不變(例如2),那么結(jié)果就一直不會有變化。

  那么如何實現(xiàn)隨機查詢呢?本人有兩種方法。

  方法一、數(shù)據(jù)表記錄不大的情況下:

  select * from `table`

  查出來所有的記錄列表,然后array_rand()隨機出一個結(jié)果的數(shù)組的key。連續(xù)的key可以使用mt_rand(1, count($list)); 為什么不使用rand而是mt_rand呢?因為mt_rand幣rand快4倍。

  這種情況下,查出整個列表,存入到Memcache的緩存或者Redis的NoSQL中,下次直接取出結(jié)果集而不需要查表。不過當數(shù)據(jù)量一旦超過萬級別,取出列表就很困難了。

  方法二:使用SQL語句隨機

  MYSQL函數(shù)RAND(),產(chǎn)生一個0-1之間的小數(shù),然后MAX(`id`)可以獲得該表中最大的ID。那么MAX(`id`) * RAND()就可以取到表中所有的ID。OK,看語句。

  SELECT * FROM `table` WHERE `id` > (SELECT RAND() * (SELECT MAX(`id`) FROM `table`) LIMIT 0, 1

  既然MAX(`id`) * MAX(`id`)可以取到表里所有值,那么本語句的WHERE就可以取到本表的所有情況,那么這就是一個所有記錄都有可能被取到的隨機SQL語句。

  補充另一篇文章

  1. 多表連接類型

  1. 笛卡爾積(交叉連接) 在MySQL中可以為CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如:

  SELECT * FROM table1 CROSS JOIN table2

  SELECT * FROM table1 JOIN table2

  SELECT * FROM table1,table2

  由于其返回的結(jié)果為被連接的兩個數(shù)據(jù)表的乘積,因此當有WHERE, ON或USING條件的時候一般不建議使用,因為當數(shù)據(jù)表項目太多的時候,會非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN

  2. 內(nèi)連接INNER JOIN 在MySQL中把INNER JOIN叫做等值連接,即需要指定等值連接條件在MySQL中CROSS和INNER JOIN被劃分在一起。 join_table: table_reference [INNER | CROSS] JOIN table_f

西瓜電影網(wǎng)[www.aikan.tv/special/xiguadianyingwang/]
actor [join_condition]

  3. MySQL中的外連接,分為左外連接和右連接,即除了返回符合連接條件的結(jié)果之外,還要返回左表(左連接)或者右表(右連接)中不符合連接條件的結(jié)果,相對應的使用NULL對應。

  例子:

  user表:

  id | name

  ———

  1 | libk

  2 | zyfon

  3 | daodao

  user_action表:

  user_id | action

  —————

  1 | jump

  1 | kick

  1 | jump

  2 | run

  4 | swim

  sql:

  select id, name, action from user as u

  left join user_action a on u.id = a.user_id

  result:

  id | name | action

  ——————————–

  1 | libk | jump ①

  1 | libk | kick ②

  1 | libk | jump ③

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 蓬莱市| 塔城市| 浙江省| 娱乐| 措美县| 罗城| 隆子县| 明光市| 余庆县| 聂拉木县| 新河县| 西华县| 恩平市| 黎平县| 聂荣县| 阳山县| 民县| 安乡县| 奉贤区| 海兴县| 新宾| 从江县| 泽州县| 平舆县| 吉隆县| 乌什县| 虎林市| 通州区| 万安县| 和田县| 桑日县| 富顺县| 合水县| 文水县| 蛟河市| 任丘市| 高青县| 湖北省| 清河县| 锡林郭勒盟| 尖扎县|