日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

MySQL索引簡單分析_MySQL教程

編輯Tag賺U幣
教程Tag: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%’ :顯示

來源:未知//所屬分類:MySQL教程/更新時間:2012-10-26
相關(guān)MySQL教程