程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL索引簡單分析

MySQL索引簡單分析

編輯:MySQL綜合教程


創建2張用戶表user、user2,表結構相同,但user表使用InnoDB存儲引擎,而user2表則使用 MyISAM存儲引擎。 www.2cto.com  
  -- 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條測試數據到表user & user2。 www.2cto.com     <?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測試數據到表 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 表中的數據和 User2 表中的數據是一樣的,索引結構也是一樣的,只不過它們的存儲引擎不同。在圖1中,查詢用到了PRIMARY主鍵索引,而查詢優化器預估的結果大概在65954行左右(實際是131513);在圖2中,查詢卻沒有使用索引,而是全表掃描了,返回的預估結果在131608行(實際是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
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved