如何加快下表的SELECT查询?

时间:2014-05-10 09:04:53

标签: php mysql

我有一个mysql表,其创建代码如下:
         

         CREATE TABLE image_ref (
    region VARCHAR(50) NULL DEFAULT NULL,
    district VARCHAR(50) NULL DEFAULT NULL,
    district_name VARCHAR(100) NULL DEFAULT NULL,
    lot_no VARCHAR(10) NULL DEFAULT NULL,
    sp_no VARCHAR(10) NULL DEFAULT NULL,
    name VARCHAR(200) NULL DEFAULT NULL,
    form_no VARCHAR(50) NOT NULL DEFAULT '',
    imagename VARCHAR(50) NULL DEFAULT NULL,
    updated_by VARCHAR(50) NULL DEFAULT NULL,
    update_log DATETIME NULL DEFAULT NULL,
    ip VARCHAR(50) NULL DEFAULT NULL,
    imgfetchstat VARCHAR(1) NULL DEFAULT NULL,
    PRIMARY KEY (form_no)
        )
        COLLATE='latin1_swedish_ci'
        ENGINE=MyISAM;
        
该表包含大约7,00,000行。我有一个使用PHP开发的应用程序。某处我需要运行以下查询:

SELECT
    min(imagename) imagename
FROM
    image_ref 
WHERE
    district_name = '$sess_district' 
    AND 
        lot_no = '$sess_lotno' 
    AND 
        imgfetchstat = '0';

平均为1.560秒。 form_no字段仅具有唯一值。完成一些工作后,结果集被提取,imgfetchstat需要更新值1.现在我的要求是,我是否应该使用InnoDB或MyISAM?此外,该应用程序由LAN中约50个用户访问。有没有什么办法可以更快地运行上面的查询?因为提取的imagename用于将分辨率为500 x 498的图像加载到浏览器中,并且它需要足够的时间来加载图像。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以在表格中添加索引(请注意,这会使存储空间更大 - 但根据您的查询,您应该可以使用以下内容:

ALTER TABLE `table` ADD INDEX `product_id` (`product_id`)

有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/create-index.html

您可以在单个列上添加索引(这样可以使数据库很好用,即使它在查询中使用了一些索引)但是如果您有一个需要真正快速运行的特定查询,则可以添加一个特定于您的查询的多列索引:

ALTER TABLE image_ref ADD INDEX `someName` 
(`district_name`, `lot_no`, `imgfetchstat`)