Php 带索引的MySQL查询优化器

Php 带索引的MySQL查询优化器,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,我有一个数据库,里面有很多广告贴。当大小较小时,它可以正常工作,但现在托管公司经常挂起我的帐户,因为我的数据库有超过100000行。他们告诉我,我的查询对于我的表来说不再那么有效了。所以,我在网上做了一些搜索,查找索引可能是解决我的查询问题的一种方法 这里是我的网站查询 $sql = "SELECT * FROM `adstable` WHERE `keytype` = '".$cate."' ORDER BY `adstable`.`id`

我有一个数据库,里面有很多广告贴。当大小较小时,它可以正常工作,但现在托管公司经常挂起我的帐户,因为我的数据库有超过100000行。他们告诉我,我的查询对于我的表来说不再那么有效了。所以,我在网上做了一些搜索,查找索引可能是解决我的查询问题的一种方法

这里是我的网站查询

$sql = "SELECT * 
        FROM `adstable` 
        WHERE `keytype` = '".$cate."' 
        ORDER BY `adstable`.`id` DESC 
        LIMIT 2000";
$cate将根据访客选择的类别进行更改。我正在使用phpmyadmin,我想知道索引将如何处理上面的查询。我已经为cate列创建了索引,但不知道如何使用创建的索引优化查询

下面是我如何添加索引的

ALTER TABLE  `adstable` ADD INDEX (  `keytype` )
利用

EXPLAIN 
SELECT * 
FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000
我得到了这样的东西:

id | select_type | table  | type | possible_keys | key     | key_len | ref | rows | Extra
1  | SIMPLE  |adstable| ref  | keytype       | keytype |   38    |const|49392 | Using where; Using filesort

提前谢谢

如果您所说的
cate列
是指
keytype列
,则您的索引已被使用。您是否注意到查询中有任何改进?要检查该查询中是否确实使用了索引,可以运行以下查询:

EXPLAIN SELECT * FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000
您可以发布如何创建索引以及该查询的结果,以提供更多信息

  • 这是一张MyISAM桌子吗?如果是,请添加
    (键类型,id)
    索引

  • 如果您可以将
    2000
    限制降低到更合理的程度,例如,如果您实际上不需要2000行,请降低该值

  • 您真的需要
    SELECT
    列表中的所有列吗?如果没有,请删除
    *
    ,只写下需要的列


  • 选择*时,如果索引位于表中的每一列上,则索引将起到帮助作用。但是如果您这样做了,我相信您的主机也不会喜欢这样做……您需要缩小select语句的范围,只包含您需要的字段。编辑你的问题,只包括你需要的那些列,有人可以帮你创建一个合适的索引。为什么你需要限制2000?你当然可以少排几行吗?我无法想象你会在一个页面上放置2000个广告:)我只是在列名旁边使用了“照明”符号,所有这些都是用phpmyadmin完成的。这样做对吗?我对phpmyadmin了解不多,但只要在任何mysql客户端中使用适当的类别运行上一个查询,就会返回一个很好的表:)嗨,莫斯蒂,我已经编辑了我的问题,请告诉我是否已经添加了索引??使用查询时,我没有体验到任何速度提升。我能做些什么来看看这个查询是否真的有效?