Hello.
Taking into an account the nature of your queries, I can forward you to
these links:
http://dev.mysql.com/doc/refman/5.0/en/query-speed.html
http://dev.mysql.com/doc/refman/5.0/en/limit-optimization.html
If some of your fields have only two values ('Yes', 'No') you can
switch to ENUM type, it should improve the performance. See:
http://dev.mysql.com/doc/refman/5.0/en/enum.html
Use EXPLAIN to find out if your queries use proper indexes:
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Why are you using HAVING if you do not have GROUP BY in
your 'CREATE TEMPORARY...' query? See:
http://dev.mysql.com/doc/refman/5.0/en/select.html
Shaun wrote:
> Sorry guys,
>
> here is a table description, query and result:
>
> SHOW CREATE TABLE Properties;
>
> Properties |CREATE TABLE `Properties` (
> `Property_ID` int(11) NOT NULL auto_increment,
> `Insertion_Date` date default NULL,
> `Status` varchar(20) default NULL,
> `Uploader_ID` int(11) default NULL,
> `Approver_ID` int(11) default NULL,
> `Property_Name_Or_Number` varchar(50) default NULL,
> `Address_Line_1` varchar(50) default NULL,
> `Address_Line_2` varchar(50) default NULL,
> `City` varchar(50) default NULL,
> `County` varchar(50) default NULL,
> `Postcode` varchar(12) default NULL,
> `Asking_Price` int(11) default NULL,
> `Date_On_Market` date default NULL,
> `Sale_Price` int(11) default NULL,
> `Exchange_Date` date default NULL,
> `Tenure_ID` int(11) default NULL,
> `Years_On_Lease` int(11) default NULL,
> `Tax_Band_ID` int(11) default NULL,
> `Age_ID` int(11) default NULL,
> `Type_ID` int(11) default NULL,
> `Number_Of_Bedrooms` int(11) default NULL,
> `Number_Of_Bathrooms` int(11) default NULL,
> `Number_Of_Receptions` int(11) default NULL,
> `Number_Of_Kitchens` int(11) default NULL,
> `Desirability_Of_Area_ID` int(11) default NULL,
> `Internal_Condition_ID` int(11) default NULL,
> `External_Condition_ID` int(11) default NULL,
> `Plot_Size_ID` int(11) default NULL,
> `Internal_Square_Footage` decimal(11,2) default NULL,
> `Internal_Square_Meters` decimal(11,2) default NULL,
> `Price_Per_Square_Foot` decimal(6,2) default NULL,
> `Price_Per_Square_Meter` decimal(6,2) default NULL,
> `Forced_Sale` char(3) NOT NULL default 'No',
> `Sheltered_Accommodation` char(3) NOT NULL default 'No',
> `Direct_From_Developer` char(3) NOT NULL default 'No',
> `Reposession` char(3) NOT NULL default 'No',
> `Requires_Updating` char(3) NOT NULL default 'No',
> `Ex_Local_Authority` char(3) NOT NULL default 'No',
> `Requires_Modernisation` char(3) NOT NULL default 'No',
> `Executors_Sale` char(3) NOT NULL default 'No',
> `Deposit_Paid_Or_Part_Exchange` char(3) NOT NULL default 'No',
> `Shared_Equity` char(3) NOT NULL default 'No',
> `Ex_Show_Home_Or_Site_Office` char(3) NOT NULL default 'No',
> `Tenanted_Or_Part_Tenanted` char(3) NOT NULL default 'No',
> `Auction_Sale` char(3) NOT NULL default 'No',
> `Listed_Building` char(3) NOT NULL default 'No',
> `Grade_ID` int(11) default NULL,
> `Conservation_Area` char(3) NOT NULL default 'No',
> `Number_Of_Garages` int(11) default NULL,
> `Resident_Parking` char(3) NOT NULL default 'No',
> `Number_Of_Parking_Spaces` int(11) default NULL,
> `Other_Factors_Affecting_Sale` text,
> `Measurement_Type` varchar(10) default NULL,
> PRIMARY KEY (`Property_ID`)
> ) ENGINE=MyISAM DEFAULT CHARSET=latin1
>
> mysql> SELECT @SourceX := PC.X_COORD, @SourceY := PC.Y_COORD, @TargetR :=
> O.Radius
> -> FROM Postcodes PC
> -> INNER JOIN Offices O
> -> ON SUBSTRING(O.Postcode, 1, LOCATE(' ', O.Postcode) + 1 ) =
> PC.PCDSECT
> -> INNER JOIN Users U
> -> ON U.Office_ID = O.Office_ID
> -> AND U.User_ID = 183;
> +------------------------+------------------------+----------------------+
> | @SourceX := PC.X_COORD | @SourceY := PC.Y_COORD | @TargetR := O.Radius |
> +------------------------+------------------------+----------------------+
> | 292312.9 | 92463.8 | 1 |
> +------------------------+------------------------+----------------------+
> 1 row in set (0.00 sec)
>
> mysql>
> mysql> CREATE TEMPORARY TABLE tmpShortList (KEY(PCDSECT)) SELECT
> -> PC.PCDSECT,
> -> (@SourceX - PC.X_COORD) X_DIFF,
> -> (@SourceY - PC.Y_COORD) Y_DIFF
> -> FROM Postcodes PC
> -> WHERE PC.X_COORD BETWEEN (@SourceX - (1609 * @TargetR)) AND (@SourceX
> + (1609 * @TargetR))
> -> AND PC.Y_COORD BETWEEN (@SourceY - (1609 * @TargetR)) AND (@SourceY +
> (1609 * @TargetR))
> -> HAVING SQRT(X_DIFF*X_DIFF + Y_DIFF*Y_DIFF) <= (1609 * @TargetR);
> Query OK, 6 rows affected (0.02 sec)
> Records: 6 Duplicates: 0 Warnings: 0
>
> mysql> SELECT DATE_FORMAT(P1.Insertion_Date, "%D of %M %Y") AS "Insertion
> Date",
> -> S.Name AS "Uploaded By",
> -> P1.Property_Name_Or_Number AS "Name or Number",
> -> P1.Address_Line_1 AS "Address Line 1",
> -> P1.Address_Line_2 AS "Address Line 2",
> -> P1.City AS "City", P1.County AS "County",
> -> P1.Postcode AS "Postcode",
> -> CONCAT("", P1.Asking_Price) AS "Asking Price",
> -> CONCAT("", P1.Sale_Price) AS "Sale Price",
> -> DATE_FORMAT(P1.Date_On_Market, "%D of %M %Y") AS "Date on Market",
> -> DATE_FORMAT(P1.Exchange_Date, "%D of %M %Y") AS "Exchange Date",
> -> T1.Tenure AS "Tenure", P1.Years_On_Lease AS "Years on Lease",
> -> T2.Tax_Band AS "Tax Band",
> -> A.Age AS "Age",
> -> C.Category AS "Category",
> -> T3.Type AS "Type",
> -> P1.Number_Of_Bedrooms AS "Number of Bedrooms",
> -> P1.Number_Of_Bathrooms AS "Number of Bathrooms",
> -> P1.Number_Of_Receptions AS "Number of Bathrooms",
> -> P1.Number_Of_Kitchens AS "Number of Kitchens",
> -> D.Desirability_Of_Area_ID AS "Desirability of Area",
> -> I.Internal_Condition_ID AS "Internal Condition",
> -> E.External_Condition_ID AS "External Condition",
> -> P2.Plot_Size_ID AS "Plot Size",
> -> P1.Internal_Square_Footage AS "Internal Square Footage",
> -> P1.Internal_Square_Meters AS "Internal Squery Meters",
> -> P1.Price_Per_Square_Foot AS "Price Per Square Foot",
> -> P1.Price_Per_Square_Meter AS "Price Per Square Meter",
> -> P1.Forced_Sale AS "Forced Sale",
> -> P1.Reposession AS "Reposession",
> -> P1.Requires_Updating AS "Requires Updating",
> -> P1.Ex_Local_Authority AS "Ex Local Authority",
> -> P1.Requires_Modernisation AS "Requires Modernisation",
> -> P1.Executors_Sale AS "Executors Sale",
> -> P1.Deposit_Paid_Or_Part_Exchange AS "Deposit Paid Or Part Exchange",
> -> P1.Shared_Equity AS "Shared Equity",
> -> P1.Ex_Show_Home_Or_Site_Office AS "Ex Show Home Or Site Office",
> -> P1.Tenanted_Or_Part_Tenanted AS "Tenanted Or Part Tenanted",
> -> P1.Auction_Sale AS "Auction Sale",
> -> P1.Listed_Building AS "Listed Building",
> -> G.Grade AS "Grade",
> -> P1.Conservation_Area AS "Conservation Area",
> -> P1.Number_Of_Garages AS "Number of Garages",
> -> P1.Resident_Parking AS "Residents Parking",
> -> P1.Number_Of_Parking_Spaces AS "Number Of Parking Spaces",
> -> P1.Other_Factors_Affecting_Sale AS "Other_Factors_Affecting_Sale"
> -> FROM Properties P1 INNER JOIN tmpShortList SL ON
> SUBSTRING(P1.Postcode, 1, LOCATE(' ', P1.Postcode) + 1 ) = SL.PCDSECT, Ages
> A, Users U, Offices O, Subscribers S, Tenures T1, Tax_Bands T2, Categories
> C, Types T3, Desirability_Of_Areas D, Internal_Conditions I,
> External_Conditions E, Plot_Sizes P2, Grades G WHERE P1.Status = "Approved"
> AND P1.Uploader_ID = U.User_ID AND U.Office_ID = O.Office_ID AND
> O.Subscriber_ID = S.Subscriber_ID AND P1.Tenure_ID = T1.Tenure_ID AND
> P1.Tax_Band_ID = T2.Tax_Band_ID AND P1.Age_ID = A.Age_ID AND P1.Type_ID =
> T3.Type_ID AND C.Category_ID = T3.Category_ID AND P1.Desirability_Of_Area_ID
> = D.Desirability_Of_Area_ID AND P1.Internal_Condition_ID =
> I.Internal_Condition_ID AND P1.External_Condition_ID =
> E.External_Condition_ID AND P1.Plot_Size_ID = P2.Plot_Size_ID AND
> P1.Grade_ID = G.Grade_ID LIMIT 1;
> +--------------------+----------------------+----------------+------------------+----------------+--------+--------+----------+--------------+------------+-------------------+------------------+----------+----------------+-----------+--------+----------+---------------+--------------------+---------------------+---------------------+--------------------+----------------------+--------------------+--------------------+-----------+-------------------------+------------------------+-----------------------+------------------------+-------------+-------------+-------------------+--------------------+------------------------+----------------+-------------------------------+---------------+-----------------------------+---------------------------+--------------+-----------------+-----------+-------------------+-------------------+-------------------+--------------------------+----------------------------------------------------------------------------------------------------------
--------+
> | Insertion Date | Uploaded By | Name or Number | Address Line
> 1 | Address Line 2 | City | County | Postcode | Asking Price | Sale
> Price | Date on Market | Exchange Date | Tenure | Years on Lease |
> Tax Band | Age | Category | Type | Number of Bedrooms | Number
> of Bathrooms | Number of Bathrooms | Number of Kitchens | Desirability of
> Area | Internal Condition | External Condition | Plot Size | Internal Square
> Footage | Internal Squery Meters | Price Per Square Foot | Price Per Square
> Meter | Forced Sale | Reposession | Requires Updating | Ex Local Authority |
> Requires Modernisation | Executors Sale | Deposit Paid Or Part Exchange |
> Shared Equity | Ex Show Home Or Site Office | Tenanted Or Part Tenanted |
> Auction Sale | Listed Building | Grade | Conservation Area | Number of
> Garages | Residents Parking | Number Of Parking Spaces |
> Other_Factors_Affecting_Sale
> |
> +--------------------+----------------------+----------------+------------------+----------------+--------+--------+----------+--------------+------------+-------------------+------------------+----------+----------------+-----------+--------+----------+---------------+--------------------+---------------------+---------------------+--------------------+----------------------+--------------------+--------------------+-----------+-------------------------+------------------------+-----------------------+------------------------+-------------+-------------+-------------------+--------------------+------------------------+----------------+-------------------------------+---------------+-----------------------------+---------------------------+--------------+-----------------+-----------+-------------------+-------------------+-------------------+--------------------------+----------------------------------------------------------------------------------------------------------
--------+
> | x | x | 9 | x| x| x | x |x| x | x | x1998 | x| x |
> 0 | Not Known | x | x | x | 6 | 2 |
> 5 | NULL | 2 | 3 |
> 2 | 4 | x| x | x |
> x | No | No | No | No | No
> | No | No | No | No
> | No | No | Yes | Not Known |
> No | NULL | No |
> NULL | x |
> +--------------------+----------------------+----------------+------------------+----------------+--------+--------+----------+--------------+------------+-------------------+------------------+----------+----------------+-----------+--------+----------+---------------+--------------------+---------------------+---------------------+--------------------+----------------------+--------------------+--------------------+-----------+-------------------------+------------------------+-----------------------+------------------------+-------------+-------------+-------------------+--------------------+------------------------+----------------+-------------------------------+---------------+-----------------------------+---------------------------+--------------+-----------------+-----------+-------------------+-------------------+-------------------+--------------------------+----------------------------------------------------------------------------------------------------------
--------+
> 1 row in set (20.84 sec)
>
> mysql>
>
>
> "Gleb Paharenko" <[EMAIL PROTECTED]> wrote in message
> news:[EMAIL PROTECTED]
>
>>Hello.
>>
>>You will get much more help from the list if you provide the current
>>table structure, short description of the information which is stored
>>in that fields, and the query you want to optimize (most probably it
>>takes much more time than others).
>>
>>
>>>If point 1 is true then is there a way to trim all whitespace data?
>>
>>There are LTRIM and RTRIM functions. See:
>> http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
>>
>>
>>
>>
>>
>>Shaun wrote:
>>
>>>Hi,
>>>
>>>I am trying to optimize my data and am currently looking at indexes etc.
>>>Someone has suggested the following as well:
>>>
>>>1. Ensure that there is no whitespace at the beginning or end of entries
>>>2. Use 1 or 0 instead of yes or no.
>>>
>>>If point 1 is true then is there a way to trim all whitespace data? The
>>>problem I see with point 2 is it makes querying the data more awkward to
>>>replace every 1 with a yes and 0 with a no.
>>>
>>>I would be most grateful for your comments on this.
>>>
>>>
>>
>>
>>--
>>For technical support contracts, goto https://order.mysql.com/?ref=ensita
>>This email is sponsored by Ensita.NET http://www.ensita.net/
>> __ ___ ___ ____ __
>> / |/ /_ __/ __/ __ \/ / Gleb Paharenko
>>/ /|_/ / // /\ \/ /_/ / /__ [EMAIL PROTECTED]
>>/_/ /_/\_, /___/\___\_\___/ MySQL AB / Ensita.NET
>> <___/ www.mysql.com
>
>
>
--
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.NET http://www.ensita.net/
__ ___ ___ ____ __
/ |/ /_ __/ __/ __ \/ / Gleb Paharenko
/ /|_/ / // /\ \/ /_/ / /__ [EMAIL PROTECTED]
/_/ /_/\_, /___/\___\_\___/ MySQL AB / Ensita.NET
<___/ www.mysql.com
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]