- table
表示所引用的表格名稱。 - type
表示查詢時的「聯結類型」(join type),以下依序是「最佳」至「最差」的各種類型: - system
表格中僅有一列。這是 const 類型的一個特例。 - const
表格中符合條件的只有一列。因為僅有一列,其值在後續的查詢中可被視為常數。 - eq_ref
表示在與其它表格的資料列結合時,此表格只有一列會被讀取。當 join 使用到資料表中的所有索引,並索引是 UNIQUE 或 PRIMARY KEY 時才會被用到。 - ref
表示在與其它表格的資料列結合時,此表格中所有符合的資料列都會被讀出來。這是當 join 只使用到部份鍵值(註),或此鍵非 UNIQUE 或 PRIMARY KEY 時才會用到(依照 join 的條件仍然無法選定單一目標列)。若因此符合的資料列數不多的話,它也算是一種不錯的「聯結類型」。
註:我們指定「A+B」欄位為 index key,但查詢時只用到「A」欄位。 - range
表示將在一定範圍內執行搜尋的動作。 - index
與 ALL 相同,但只有 index table 會被瀏覽。這通常比 ALL 快,因為 index table 通常比原始資料表來得小。 - All
表示這項查詢將對整個原始資料表瀏覽一遍,是最不好的類型。 - possible_keys
表示 MySQL 能夠藉由哪些 index 來搜尋目標。 - key
表示 MySQL 實際藉由哪個 index 來搜尋目標。 - key_len
表示 MySQL 實際使用的 key 長度。若 index key 是由兩個欄位以上複合而成的話,您可以在此看見 MySQL 使用了 index 的多少部份。 - ref
表示哪個欄位(或常數)將被用來與 key 一起比對。 - rows
表示 MySQL 粗略估計在查詢的過程中,必須瀏覽的資料列數。 - Extra
顯示 MySQL 在解決這項查詢工作時的一些附加訊息。例如:「where used」表示 where 子句將會限制某些資料列的輸出。
2011-11-23 00:38
[MySQL] EXPLAIN 分析報告的意義
轉載自:PHP + MySQL 程式設計研習
2011-11-23 00:14
[MySQL] TEMPORARY 臨時表
最近為了解決一個效率太差的問題而找上這個東西,由於有一個資料表的筆數實在太多了,再加上好幾百個 query 都同時在同一個區段做查詢,剛好可以使用臨時表來處理這個問題,原本查詢需要的時間大概超過一分鐘,現在最多只要 10 秒,刷新後約 2 秒。
MySQL 的臨時表只會存在在 Session 期間,當 Session 結束後就會自動刪除,不同的 Session 的表名稱並不會衝突,所以就算用一樣的名稱也不會出現錯誤,臨時表只能用在 MEMORY,MyISAM,MERGE,或者InnoDB 引擎上。
參考資料:
MySQL CREATE TABLE Syntax
mysql temporary table簡介
避免 MySQL 使用 temporary table on disk
MySQL 的臨時表只會存在在 Session 期間,當 Session 結束後就會自動刪除,不同的 Session 的表名稱並不會衝突,所以就算用一樣的名稱也不會出現錯誤,臨時表只能用在 MEMORY,MyISAM,MERGE,或者InnoDB 引擎上。
-- 透過 SELECT 建立臨時表
CREATE TEMPORARY TABLE my_temp_table ENGINE=MEMORY
SELECT * FROM my_table WHERE col_1 > 1000
-- 為臨時表建立索引
ALTER TABLE my_temp_table
ADD INDEX (col_1),
ADD INDEX (col_1,col_2)
參考資料:
MySQL CREATE TABLE Syntax
mysql temporary table簡介
避免 MySQL 使用 temporary table on disk
2011-11-22 23:29
[PHP] 把多個圖片壓縮封裝並下載
<?php
$fileList = array(
'/var/www/pics/001.jpg',
'/var/www/pics/002.jpg',
'/var/www/pics/003.jpg',
'/var/www/pics/004.jpg',
'/var/www/pics/005.jpg',
'/var/www/pics/006.jpg',
);
/*建立臨時壓縮檔*/
$file = tempnam("tmp", "zip");
$zip = new ZipArchive;
$res = $zip->open($file, ZipArchive::CREATE|ZipArchive::OVERWRITE);
if ($res!==true) { exit('壓縮錯誤');}
foreach ($filePathList as $filePath){
$zip->addFile($filePath, $fileName);
}
$zip->close();
ob_end_clean();
header('Content-type: application/octet-stream');
header('Content-Transfer-Encoding: Binary');
header('Content-disposition: attachment; filename=pics_list.zip');
readfile($file);
unlink($file);
exit;
參考連結:PHP: ZipArchive - Manual
2011-11-11 00:24
2011-10-20 15:43
[PHP] 以活躍指標顯示日期時間
function ShowTimeLive($date) {
$diff = time() - strtotime($date);
if($diff < 60){
return $diff.' 秒前';
}elseif($diff < 3600){
return round($diff/60).' 分鐘前';
}elseif($diff < 86400){
return round($diff/3600).' 小時前';
}elseif($diff < 432000){
return round($diff/86400).' 天前';
}else{/*超過5天*/
return date('n月j日',strtotime($date));
}
}
/*demo*/
echo ShowTimeLive('2011-10-13 21:14:42');
2011-10-20 15:31
[PHP] 使用簡易單位顯示檔案大小
function ShowBytes($size) {
$size=doubleval($size);
$sizes = array(
" Bytes",
" KB",
" MB",
" GB",
" TB"
);
if ($size == 0) {
return('n/a');
} else {
$i = floor( log($size, 1024) );
return (round( $size/pow(1024, $i), 2) . $sizes[$i]);
}
}
/*demo*/
for($size=0; $size<3000000; $size+=512) {
echo $size,' => ', ShowBytes($size),'<br />';
}
/*
0 => n/a
512 => 512 Bytes
1024 => 1 KB
1536 => 1.5 KB
2048 => 2 KB
2560 => 2.5 KB
3072 => 3 KB
3584 => 3.5 KB
*/
2011-10-20 15:26
[PHP] 格式化單位秒數
只要將秒數減去 28800 之後,丟進 date() 就OK了,不過只能顯示到小時,至於要有天數的部分就不能這樣做了,只能用在一些短時間的顯示。
for($sec=0; $sec<30000; $sec+=30) {
echo $sec,' => ', date('H:i:s',$sec-28800),'<br />';
}
/*
0 => 00:00:00
30 => 00:00:30
60 => 00:01:00
90 => 00:01:30
120 => 00:02:00
150 => 00:02:30
180 => 00:03:00
*/
2011-09-13 18:01
[轉載] Linux shell script 的彩色控制
轉載自:Linux shell script 的彩色控制
Linux 下的終端機畫面不是只能換換背景而已,顯示出來的顏色也是能控制的。使用的顏色就像以前的DOS 時代,或者現在的BBS 顏色控制方式一樣。
以shell 的顯示為例,顯示的格式如下:
\33[ 文字樣式 ; 文字顏色 ; 背景顏色 m
文字內容………………
\33[0m
文字樣式有列下幾種色碼可以使用:
文字顏色則都是3開頭,有下列色碼:
再來是背景顏色色碼,都是4開頭:
如果我要在畫面上顯示高亮度的綠色(32)及黑色背景,可以如下:
也可以分開來寫比較清楚
記得shell 輸出碼要用 printf 而不是用一般的 echo。echo 的話要寫成 echo -e 。
但並不是所有的終端機畫面都是用黑色背景的。如果我們不要指定它的黑色背景,讓它使用系統原始背景色,可以省略背景描述變成如下:
是不是就比較完美了呢。
其實這些控制碼和BBS 的還真像。
Linux 下的終端機畫面不是只能換換背景而已,顯示出來的顏色也是能控制的。使用的顏色就像以前的DOS 時代,或者現在的BBS 顏色控制方式一樣。
以shell 的顯示為例,顯示的格式如下:
\33[ 文字樣式 ; 文字顏色 ; 背景顏色 m
文字內容………………
\33[0m
文字樣式有列下幾種色碼可以使用:
- 0 一般亮度
- 1 高度度
- 4 加底線
- 5 灰底
文字顏色則都是3開頭,有下列色碼:
- 30 黑色
- 31 紅色
- 32 綠色
- 33 黃色
- 34 藍色
- 35 紫色
- 36 青綠
- 37 白色
再來是背景顏色色碼,都是4開頭:
- 40 黑色
- 41 紅色
- 42 綠色
- 43 黃色
- 44 藍色
- 45 紫色
- 46 青綠
- 47 白色
如果我要在畫面上顯示高亮度的綠色(32)及黑色背景,可以如下:
sprintf "\33[1;32;40m 我的文字 \33[0m"
也可以分開來寫比較清楚
sprintf "\33[1;32;40m " sprintf "我的文字" sprintf "\33[0m"
記得shell 輸出碼要用 printf 而不是用一般的 echo。echo 的話要寫成 echo -e 。
但並不是所有的終端機畫面都是用黑色背景的。如果我們不要指定它的黑色背景,讓它使用系統原始背景色,可以省略背景描述變成如下:
sprintf "\033[1;32m" sprintf "我的文字" sprintf "\033[0m"
是不是就比較完美了呢。
其實這些控制碼和BBS 的還真像。
訂閱:
文章 (Atom)
