MySQL索引簡單分析_MySQL教程
推薦:MySQL性能優(yōu)化的最佳21條經(jīng)驗(yàn)今天,數(shù)據(jù)庫的操作越來越成為整個應(yīng)用的性能瓶頸了,這點(diǎn)對于Web應(yīng)用尤其明顯。關(guān)于數(shù)據(jù)庫的性能,這并不只是DBA才需要擔(dān)心的事,而這更是我們程序員需要去關(guān)注的事情。當(dāng)我們?nèi)ピO(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu),對操作數(shù)據(jù)庫時(尤其是查表時的SQL語句),我們都需要注意數(shù)據(jù)操作的
創(chuàng)建2張用戶表user、user2,表結(jié)構(gòu)相同,但user表使用InnoDB存儲引擎,而user2表則使用 MyISAM存儲引擎。
-- Table "user" DDL CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `age` tinyint(4) DEFAULT NULL, `nickname` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `name` (`name`), KEY `age` (`age`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Table "user2" DDL CREATE TABLE `user2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `email` varchar(100) DEFAULT NULL, `age` tinyint(4) DEFAULT NULL, `nickname` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `name` (`name`), KEY `age` (`age`) ) ENGINE=MyISAM AUTO_INCREMENT=131610 DEFAULT CHARSET=utf8;
分別插入10W條測試數(shù)據(jù)到表user & user2。
<?php
$example = array(
'@qq.com',
'@sina.com.cn',
'@163.com',
'@126.com',
'@gmail.com',
'@yahoo.com',
'@live.com',
'@msn.com',
'@cisco.com',
'@microsoft.com',
'@ibm.com',
'@apple.com');
$con = mysql_connect("localhost", "root", "your_mysql_password");
mysql_select_db("index_test", $con);
//添加10W測試數(shù)據(jù)到表 user & user2
for($i=0; $i<100000; $i++)
{
$temp = md5(uniqid());
$name = substr($temp, 0, 16);
$email = substr($temp, 8, 12).$example[array_rand($example, 1)];
$age = rand(18, 99);
$nickname = substr($temp, 16, 16);
mysql_query("INSERT INTO user(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");
mysql_query("INSERT INTO user2(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");
}
mysql_close($con);
echo 'success';
?>對索引的使用分析
Explain Select * from user where id>100 \G;

圖1
Explain Select * from user2 where id>100 \G;

圖2
User 表中的數(shù)據(jù)和 User2 表中的數(shù)據(jù)是一樣的,索引結(jié)構(gòu)也是一樣的,只不過它們的存儲引擎不同。在圖1中,查詢用到了PRIMARY主鍵索引,而查詢優(yōu)化器預(yù)估的結(jié)果大概在65954行左右(實(shí)際是131513);在圖2中,查詢卻沒有使用索引,而是全表掃描了,返回的預(yù)估結(jié)果在131608行(實(shí)際是131509)。
Explain Select * from user where id>100 and age>50 \G;

圖3
Explain Select * from user where id>100 and age=50 \G;

圖4
Explain Select * from user2 where id>100 and age>50 \G;

圖5
Explain Select * from user2 where id>100 and age=50 \G;

圖6
分享:MySql優(yōu)化指南MySql優(yōu)化的一般步驟: 1.通過show status 命令了解各種sql的執(zhí)行效率 SHOW STATUS提供msyql服務(wù)器的狀態(tài)信息 一般情況下,我們只需要了解以”Com”開頭的指令 show session status like ‘Com%’:顯示當(dāng)前的連接的統(tǒng)計(jì)結(jié)果 show global status like ‘Com%’ :顯示
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫中保留小數(shù)位的問題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫以及函數(shù)、存儲過程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個MYSQL語法(在查詢中使用count)的兼容性問題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- MySQL為什么會索引失效?
- MySQL數(shù)據(jù)庫備份和還原的常用命令
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- MySql大批量導(dǎo)入數(shù)據(jù)優(yōu)化
- mysql導(dǎo)出數(shù)據(jù)庫幾種方法
- MySQL DELETE語法使用詳細(xì)解析
- 如何通過配置自動實(shí)現(xiàn)ValueList中hql語句的整型參數(shù)轉(zhuǎn)換
- 30種mysql優(yōu)化sql語句查詢的方法
- MySQL如何設(shè)置密碼
- MySQL數(shù)據(jù)庫InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
猜你也喜歡看這些
- SQL Server 2000數(shù)據(jù)庫崩潰后的補(bǔ)救措施
- SQL Server2005的XML數(shù)據(jù)類型之基礎(chǔ)篇
- sql server 2008中的apply運(yùn)算符使用方法
- 關(guān)于PowerDesigner初體驗(yàn)的使用介紹
- SQL SERVER應(yīng)用問題解答13例(一)
- 微軟SQL Server 2008 的新壓縮特性
- SQL Server 2008存儲結(jié)構(gòu)之GAM、SGAM介紹
- SQL Server 2005通用分頁存儲過程及多表聯(lián)接應(yīng)用
- 怎樣減少SQL Server死鎖發(fā)生的情況
- 注意SQL Server視圖管理中的四個限制條件
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-MySQL索引簡單分析
。