5. MySQL query бичихэд
анхаарах зүйлс
• Түгээмэл алдаанууд
• Limit ашиглах
• Олон давхар Join ашигласан үед бүх баганыг Select хийх
SELECT * FROM sakila.actor
INNER JOIN salila.film_actor USING (actor_id)
INNER JOIN salila.film USING (film_id)
WHERE sakila.film.title = 'Academy Dinosaur';
6. MySQL query бичихэд
анхаарах зүйлс
• Бүх баганыг Select хийх SELECT *
• Count(*) => Count(column_name)
• Unique row
SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1
• Order by RAND()
• ENUM ийг тогтмол тэмдэгттэй vед VARCHAR
7. Join Decomposition
• SELECT * FROM tag
JOIN tag_post ON tag_post.tag_id=tag.id
JOIN post ON tag_post.post_id=post.id
WHERE tag.tag='mysql';
• SELECT * FROM tag WHERE tag='mysql';
SELECT * FROM tag_post WHERE tag_id=1234;
SELECT * FROM post WHERE post.id in
(123,456,567,9098,8904);
9. Unbuffered query
• mysql_connect("localhost", "php", "alm65z");
mysql_select_db("phpdb");
$result = mysql_unbuffered_query("SELECT ID,
Name FROM conferences;");
$result = mysql_query("SELECT ID, Name FROM
conferences;");
while ($row = mysql_fetch_assoc($result)) {
extract($row, EXTR_PREFIX_ALL, "conf");
print "$conf_Namen";
}
10. Chopping up a Query
Mysql> DELETE FROM messages WHERE created <
DATE_SUB(NOW(),INTERVAL
3 month)
rows_affected = 0
do{
rows_affected = do_query(
DELETE FROM messages WHERE created <
DATE_SUB(NOW(),INTERVAL 3 month) LIMIT 10000
)
} while rows_affected > 0
11. Query Cache
// query cache does NOT work
$r = mysql_query("SELECT username FROM user
WHERE signup_date >= CURDATE()");
// query cache works!
$today = date("Y-m-d");
$r = mysql_query("SELECT username FROM user
WHERE signup_date >= '$today'");
12. Index the Search Fields
Mysql> Select count(1) From users Where last_name Like
‘a%’; 0.25
Mysql> Alter table ‘users’ Add index(‘last_name’);
Mysql> Select count(1) From users Where last_name Like
‘a%’; 0.06
Count == 63285
13. Index use for Join
SELECT company_name FROM users
LEFT JOIN companies ON (users.state = companies.state)
WHERE users.id = 15
users.state - индекслэгдсэн багана
15. IP Addresses as Unsigned int
UPDATE users SET ip = INET_ATON
('{$_SERVER['REMOTE_ADDR']}') WHERE user_id =15
192.168.1.100
INET_NTOA() , ip2long() , long2ip()
16. Partition
• CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)
ENGINE=INNODB PARTITION BY HASH( MONTH(tr_date) )
PARTITIONS 6;
• Partition type
• Hash
• Range
• List
• Key