暂无 |

2 判断条件的设定

如果想要查询一个表格所有的资料,你就不会使用「WHERE」设定查询条件,那就只能请资料库读取表格中所有的资料后传回来,有没有索引就不会有效率上的影响。不过如果使用「WHERE」子句设定查询条件的话,就要尽量使用索引来增加查询的效率。以下列的表格来说:

mysql_20_snap_07

虽然你为生日栏位建立了索引,如果你在索引栏位使用函式或运算式的话:

mysql_20_snap_08

下列的叙述就会使用索引,虽然比较长一些,不过它执行的效率会比上列的叙述好一些:

mysql_20_snap_09

MySQL资料库在下列的情况下,都会自动帮你执行转换的工作:

mysql_20_snap_10

虽然上列的查询叙述在执行后也可以传回你想要的资料,不过MySQL在处理每一笔资料的时候,都要帮你执行一次转换的工作,这样的写法是很没有效率的。所以你要尽可能避免这样的情形:

mysql_20_snap_11

另外在关联式资料库的设计下,你应该会很常执行类似下列叙述的结合查询:

mysql_20_snap_12

结合查询是一种很没有效率的查询,因为资料库要比对两个表格中,结合条件所设定的栏位值,如果资料数量很多的话,这样的比对工作就会花很多时间。所以你通常会帮结合条件中的栏位建立索引,以上列的查询来说,国家表格的「Code」栏位已经是主索引键;而城市表格的「CountryCode」并没有建立索引,为了增加结合查询的效率,你可以建立下列的索引:

mysql_20_snap_13

如果经常使用国家名称执行条件判断的话,你可能会帮它建立一个索引:

mysql_20_snap_14

使用完整的国家名称执行条件判断的话,因为使用索引执行搜寻,所以效率会比较好一些。可是如果使用字串样式执行条件判断的话,就不一定会使用索引了:

mysql_20_snap_15

有一些索引可能会包含多个栏位:

mysql_20_snap_16

在查询的条件中,如果跟多个栏位的索引有关的话,MySQL会依照索引栏位的顺序来决定是否使用索引。以上列的例子来说,主索引键的顺序是CountryCode栏位在前面,Language栏位在后面,如果你的查询条件只有使用Language栏位的话,这个索引就不会生效:

mysql_20_snap_17

0

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论