3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
在一些狀況下,資料庫的資料可能存成以下這樣 name category Book1 1,2,3 Book2 1,3 Book3 1,8,10 Book4 2,9 Book5 1,9,11 Book6 9,25 Book7 9,12 如果要找出有 9 這個狀態的資料,可以直接在query中使用FIND_IN_SET這個函式 -- category 為欄位名稱 SELECT * FROM `table` WHERE FIND_IN_SET('9',category); 效能問題 但FIND_IN_SET這樣的做法,在資料量很大的時候非常有問題。原因是使用FIND_IN_SET並不會使用到index,所以會造成full table scan 要解決這個問題必須換個方法: 1.先把category GROUP BY 出來(縮小範圍) SELECT * FROM `find_category` GROUP BY `category`; 2.針對 GROUP BY 的結果做FIND_IN_SET(確認結果) SELECT * FROM (SELECT * FROM `find_category` GROUP BY `category`) as T WHERE FIND_IN_SET('9',T.category); 3.再用確認的結果去搜尋 SELECT * FROM `find_category` WHERE `category` IN ('1,9,11','2,9','9,12','9,25'); 搜尋問題 另外在進行條件搜尋時,記得使用string -- 結果只有 1 SELECT * FROM `find_category` WHERE `category` = '1'; 如果是使用數字的話,除了搜尋不會用到index之外,出來的結果也會有問題 -- "1,2,3", "1", "1,8,10", "1,9,11"都會被搜出來 SELECT * FROM `find_category` WHERE `category` = 1; Categories: MySQL 分類 Android AngularJS API Blueprint Chrome Database MySQL DataStructure Docker Editor Vim Firefox Git GitLab Google API Hadoop Language Go Java JavaScript jQuery jQueryChart Node.js Vue PHP Laravel ZendFramework Python Mac Network Cisco DLink Juniper Oauth Server Apache Share Unix FreeBSD Linux WebDesign Bootstrap CSS HTML Wordpress Search 搜尋關鍵字:

本文由blogjohnsonluorg提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦