我有什麼,我認爲是一個複雜的PHP MySQL查詢,從不同的Drupal表中的一個JSON格式提取數據,然後讓我輸出通過PHP的結果。有時候這個查詢速度非常快,有時候速度很慢。如果您轉到http://www.serviidb.com/content/data/view/api_access,您可以看到實際的API響應時間。數據庫中的內容一直在增長,隨着數據庫變大,這個問題只會越來越嚴重。MySQL的PHP的查詢有時非常快ANSD有時非常非常慢
對不起忘了添加服務器信息:我怎麼打電話查詢
Server: Localhost via UNIX socket
Server version: 5.5.29-0ubuntu0.12.04.1-log
Protocol version: 10
例。
mysql_query($sqlApiAccess) or die('Error, insert query failed');
如果有人希望看到我使用的PHP只是問,我會發布它。我已經編程了多年,但對PHP來說是新的,所以我可能會做很長的一切。
我明白任何及所有的幫助,指導或建議,任何人都可以給我。
下面是該查詢:
SELECT DISTINCT
node.title AS "name",
regions.region AS region,
field_data_field_media_url.field_media_url_value AS url,
media_type.media_type AS mediaType,
repositoryType.repositoryType AS resourceType,
plugins.plugin,
media_resource_language.language,
node.nid,
resolution.resolution,
(field_data_field_quality.field_quality_rating/20) AS quality,
(field_data_field_reliability.field_reliability_rating/20)
AS reliability,
field_data_field_installs.field_installs_value AS installCount
FROM node
LEFT JOIN field_data_field_region
ON field_data_field_region.revision_id = node.vid
LEFT JOIN regions
ON regions.tid = field_data_field_region.field_region_tid
LEFT JOIN field_data_field_media_url
ON field_data_field_media_url.revision_id = node.vid
LEFT JOIN field_data_field_required_plugin
ON field_data_field_required_plugin.revision_id = node.vid
LEFT JOIN field_data_field_source
ON field_data_field_source.revision_id = node.vid
LEFT JOIN repositoryType
ON repositoryType.tid = field_data_field_source.field_source_tid
LEFT JOIN plugins
ON plugins.tid =
field_data_field_required_plugin.field_required_plugin_tid
LEFT JOIN field_data_field_media_type
ON field_data_field_media_type.revision_id = node.vid
LEFT JOIN media_type
ON media_type.tid =
field_data_field_media_type.field_media_type_tid
LEFT JOIN field_data_field_language
ON field_data_field_language.revision_id = node.vid
LEFT JOIN media_resource_language
ON media_resource_language.tid =
field_data_field_language.field_language_tid
LEFT JOIN field_data_field_resolution
ON field_data_field_resolution.revision_id = node.vid
LEFT JOIN resolution
ON resolution.tid =
field_data_field_resolution.field_resolution_tid
LEFT JOIN field_data_field_quality
ON field_data_field_quality.revision_id = node.vid
LEFT JOIN field_data_field_reliability
ON field_data_field_reliability.revision_id = node.vid
LEFT JOIN field_data_field_installs
ON field_data_field_installs.revision_id = node.vid
WHERE node.status <> 0
AND node.type = "media"
AND (node.title LIKE '%%' OR plugins.plugin LIKE '%%')
AND node.title LIKE '%%'
AND plugins.plugin LIKE '%%'
AND media_resource_language.language LIKE '%%'
AND (regions.region = "worldwide" OR regions.region LIKE '%%')
AND media_type.media_type = "video"
,我讀了它會導致查詢,如果「象」是用來運行緩慢,所以我在看一對夫婦的方式來去除像部分,除非有實際變量中的信息。以下是我目前正在開發where部分的方式。
/** setups up sql variable for searches.
*
*/
$sqlregion = "";
$sqltitle = "";
$sqlregion = 'and (regions.region = "worldwide" or ';
$sqlregion = $sqlregion . 'regions.region like ';
$sqlregion = $sqlregion . "'%";
$sqlregion = $sqlregion . $region;
$sqlregion = $sqlregion . "%')";
$slqLanguage = "and media_resource_language.language like '%" . $language . "%'";
$sqltitleOrPlugin = "and (node.title like '%" . $titleOrPlugin . "%' or plugins.plugin like '%" . $titleOrPlugin . "%')";
$sqlPlugin = "and plugins.plugin like '%" . $plugin . "%'";
$sqltitle = "and node.title like '%" . $title . "%'";
而Where語句的設置是這樣的。
WHERE node.status<>0 and node.type="media" . $sqltitleOrPlugin . $sqltitle .$sqlPlugin . $slqLanguage . $sqlregion;
其中的變量實際上是第三方應用程序填充以縮小數據的參數。像這樣的語言= EN &區=我們&標題=的&客戶端=測試
WHERE node.status<>0
and node.type="media"
and (node.title like '%%' or plugins.plugin like '%%')
and node.title like '%%'
and plugins.plugin like '%%'
and media_resource_language.language like '%%'
and (regions.region = "worldwide" or regions.region like '%us%')
and media_type.media_type ="video"
如果你至少說過,如果你正在使用mysql_ mysqli或PDO(或別的東西)爲你的php查詢 – 2013-02-28 22:02:32
'somefield LIKE'%%''是沒有意義的。基本上它會是「somefield不爲空」,但阻止索引的使用。 – 2013-02-28 22:03:00
另外,如果使用相同的查詢/數據庫卷獲得不同的速度,可能是網絡或硬件問題? – 2013-02-28 22:04:32