易截截图软件、单文件、免安装、纯绿色、仅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备份的脚本

     最近公司准备使用项目管理的网站DotProject,公司虽然不大,但是牵涉到的业务也是很复杂的,所以需要定时去保存数据库的信息以防止数据库崩溃或者其他的原因造成的数据损失,这样就需要进行数据库的备份。
     DotProject使用的是Mysql数据库,备份Mysql数据库的一个比较好的方法就是 ......

MySQL权限管理



/* CSS Document */
body {
font: normal 11px auto "Trebuchet MS", verdana, arial, helvetica, sans-serif;
color: #4f6b72;
background: #e6eae9;
}
a {
color: #c75f3e;
}
table{
padding: 0;
margin: 0;
border-left: 1px solid #c1dad7;
}
caption { ......

Ubuntu 中安装MySQL GUI Tools

编译前需要安装的库:
g++
libmysqlclient15-dev
libglade2-dev
libglib2.0-dev
libgtkmm-2.4-dev
libpcre3-dev
libxml2-dev
然后执行
cd mysql-gui-common
./configure
make
sudo make install
cd ../mysql-administrator
./configure
make
sudo make install
安装MySQL Administrator
安装完成后mysql- ......

mysql hibernate主键配置

  在近期的项目维护工作中,时常出现主键重复的异常。经过一系列资料的查询之后,发现时hibernate映射文件配置问题。
  mysql提供主键“自动增量”的配置,指定该类型的主键,mysql能够自动加一。
  在hibernate映射文件中,关于主键的配置不能是
<generator class="increment"&g ......

Apache::DBI与MYsql的持续连接太多的问题

我经过这几天研究发现mod_perl提供的持续连接并不智能(也许是我还没有找到更
好的解决方案),如果脚本中的参数和初始化的参数不一样,在内存中会出现两个
句柄。
Apache::DBI->connect_on_init("DBI:mysql:mysql:localhost","root","root",
{
PrintError => 1,
RaiseError => 0,
AutoCommit => ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号