易截截图软件、单文件、免安装、纯绿色、仅160KB

MySQL之Covering Index hust ei


http://hi.baidu.com/thinkinginlamp/blog/item/a352918fe70d96fd503d925e.html
2009年01月12日 星期一 下午 08:35
作者:老王
在网上随便搜搜,就能找到大把的关于MySQL优化的文章,不过里面很多都不准确,说个常见的:
SELECT a from ... WHERE b = ...
一般来说,很多文章会告诫你类似这样的查询,不要在“a”字段上建立索引,而应该在“b”上建立索引。这样做确实不错,但是很多时候这并不是最佳结果。为什么这样说?让我们先来分析一下查询的处理过程:在执行查询时,系统会查询“b”索引进行定位,然后再利用此定位去表里查询需要的数据“a”。也就是说,在这个过程中存在两次查询,一次是查询索引,另一次是查询表。那有没有办法用一次查询搞定问题呢?有,就是Covering Index!所谓Covering Index,就是说不必查询表文件,单靠查询索引文件即可完成。具体到此例中就是建立一个复合索引“b, a”,当查询进行时,通过复合索引的“b”部分去定位,至于需要的数据“a”,立刻就可以在索引里得到,从而省略了表查询的过程。
如果你想利用Covering Index,那么就要注意SELECT方式,只SElECT必要的字段,千万别SELECT *,因为我们不太可能把所有的字段一起做索引,虽然可以那样做,但那样会让索引文件过大,结果反倒会弄巧成拙。
如何才能确认查询使用了Covering Index呢?很简单,使用explain即可!只要在Extra里出现Using index就说明使用的是Covering Index。
知道了以上这些知识,估计对Coverging Index的了解也差不多了。再举两个例子,让大家印象深点:
(一)比如说在文章系统里统计总数的时候,一般的查询是这样的:
SELECT COUNT(*) from articles WHERE category_id = ...
当我们在category_id建立索引后,这个查询使用的就是Covering Index。
参考文档:COUNT(*) vs COUNT(col)
(二)比如说在文章系统里分页显示的时候,一般的查询是这样的:
SELECT id, title, content from article ORDER BY created DESC LIMIT 10000, 10;
通常这样的查询会把索引建在created字段(其中id是主键),不过当LIMIT偏移很大时,查询效率仍然很低,改变一下查询:
SELECT id, title, content from article
INNER JOIN (
    SELECT id from article ORDER BY created DESC LIMIT 10000, 10
) AS page USING(id)
此时,建立复合索引"created,


相关文档:

快速导出导入mysql命令


mysqldump -u root -p -e --max_allowed_packet=1048576 --net_buffer_length=16384 msiptv>c:\thedump.sql
问题:在使用mysql过程中备份数据,一般都是被分成sql语句文本,但mysqldump命令默认是非常机械地处理语句的组织。导致重新导入的时候效率太低。比如10万条数据就要执行10万次的sql语句,耗时太多。
原理: ......

MySQL优化

MySQL优化
同时在线访问量继续增大,对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机,或者时不时的服务器卡一下,这个问题曾经困扰了我半个多月。MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。
安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql ......

mysql常用指令集合


Java代码
mysql> select version(),current_date;   
查询mysql的版本号 和  日期   
mysql> select version();   
查询mysql的版本号   
select now();   
查询当前日期和准确的时间  
Java ......

mysql 自增列相关问题整理

MYSQL自增列
1.关键字 :auto_increment
2.自增用法
例:
CREATE TABLE animals ( id mediumint not null auto_increment,
name char(30) not null,
primary key (id));
3.关于自增
Q:怎么获得当前的自增的最大值?
A:select @@identity
Q:怎么获得table的当前自增最大值?
A:select max(id) from table ......

Navicat For MySQL简体中文版注册码

下载地址:http://download.csdn.net/down/434743/yuzhongqing2005
Navicat 8 for MySQL的注册码:
PremiumSoft Navicat for MySQL Enterprise Edition v8.XX
姓名(Name):3ddown.com
组织(Organization):3ddown.com
注册码(Serial):NAVJ-W56S-3YUU-MVHV ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号