MySQL:Основыоптимизации<br />или<br />Чтодолжен знать каждыйразработчик<br />
АгниславОнуфрийчук<br />Обо мне<br />
АгниславОнуфрийчук<br />Веб-разработчик<br />Обо мне<br />
АгниславОнуфрийчук<br />Веб-разработчик<br />Люблю девушек<br />Обо мне<br />
АгниславОнуфрийчук<br />Веб-разработчик<br />Люблю девушек<br />Не люблю MS Internet Exporerи Opera<br />Обо мне<br />
Ктоработает с MySQL?<br />О вас<br />
Ктоработает с MySQL?<br />КтоиспользуетMyISAM?<br />О вас<br />
Ктоработает с MySQL?<br />КтоиспользуетMyISAM?<br />Ктоещё не используетInnoDB?<br />О вас<br />
Ктоработает с MySQL?<br />КтоиспользуетMyISAM?<br />Ктоещё не используетInnoDB?<br />Кто не знает про my.ini/my.cnf?<br />...
Здесьзнают толк в оптимизацииMySQL<br />О PortaOne<br />
Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />О PortaOne<br />
Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />Здесьзнают толк в программистах<br />О PortaOne<br />
Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />Здесьзнают толк в программистах<br />Здесьзнают то...
Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />Здесьзнают толк в программистах<br />Здесьзнают то...
Начнём?<br />
ОптимизацияMySQL<br />
Всё плохо.<br />     <br />ОптимизацияMySQL<br />
Сегоднямы не поговорим о…<br />
Шардинге<br />Сегоднямы не поговорим о…<br />
Шардинге<br />Железе<br />Сегоднямы не поговорим о…<br />
Шардинге<br />Железе<br />Операционных системах<br />Сегоднямы не поговорим о…<br />
Шардинге<br />Железе<br />Операционных системах<br />Файловых системах<br />Сегоднямы не поговорим о…<br />
Сегоднямыпоговорим о…<br />
Движках (engines)<br />Сегоднямыпоговорим о…<br />
Движках (engines)<br />Базовых настройках<br />Сегоднямыпоговорим о…<br />
Движках (engines)<br />Базовых настройках<br />Полезныхутилитах<br />Сегоднямыпоговорим о…<br />
Движках (engines)<br />Базовых настройках<br />Полезныхутилитах<br />Запросах<br />Сегоднямыпоговорим о…<br />
Движках (engines)<br />Базовых настройках<br />Полезныхутилитах<br />Запросах<br />И о чём-нибудьприятном<br />Сегоднямыпо...
 Engines<br /> Settings<br /> Utilities<br /> Queries<br /> Girls <br />Roadmap<br />
 Engines<br /> Settings<br /> Utilities<br /> Queries<br /> Girls <br />Roadmap<br />
 Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
 Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
Engines<br />
WTF?<br />Engines<br />
WTF? It’s cool!<br />Engines<br />
InnoDB/XtraDB<br />MyISAM/Maria<br />Memory<br />NDB<br />CSV<br />Blackhole<br />Engines<br />
Extremely fast<br />Not-transactional<br />Table-level locking<br />No BLOB/TEXT data types<br />Engines: Memory<br />
Extremely fast<br />Transactional<br />Row-level locking<br />Good scaling capabilities<br />Engines: NDB<br />
Simple data exchange<br />No table partitioning<br />No NULL values (since 5.1.23)<br />Engines: CSV<br />
Extremely fast (faster then Memory/NDB)<br />Transactional<br />All types of indexes<br />Low-cost storage<br />Engines: B...
Default for years (up to 5.5)<br />Non-Transactional<br />Table-level locking<br />Full-text search indexes<br />Fast read...
Transactional<br />Row-level locking<br />Foreign keys<br />Simple performance tuning<br />Engines: InnoDB<br />
All InnoDB feature plus:<br />“Out-of-box” better performance<br />Most powerful performance tuning<br />“Troubleshoot wit...
 Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
There hundreds of them…<br />Settings<br />
There hundreds of them…<br />but a couple of them are enough for us<br />Settings<br />
Using memory is better than using disk<br />The main point is…<br />
query_cache_size<br />Does matter for SELECT-dedicated server<br />32M is generally enough<br />Settings<br />
innodb_buffer_pool_size<br />Give all you can:<br />Servers: 50-75% of available memory<br />Dev PC: 25-50% of available m...
innodb_log_file_size<br />Make your log files big.<br />128M/256M is a good value<br />Settings<br />
innodb_log_buffer_size<br />How often we’ll flush log data to disk<br />4M is a good value unless you’re piping large blob...
innodb_flush_log_at_trx_commit<br />0 – write log buffer to file and flush it to disk every second<br />1 – write&flush to...
innodb_thread_concurrency=8<br />Just use this value<br />Settings<br />
innodb_flush_method=O_DIRECT<br />Avoid double buffering<br />Settings<br />
innodb_file_per_table<br />Use it if you don’t have tons of tables<br />Settings<br />
 Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
tuning-primer.sh<br />mysql-tuner.pl<br />maatkit<br />innotop<br />Utilities<br />
http://www.day32.com/MySQL/<br />tuning-primer.sh<br />
SLOW QUERIES<br />Current long_query_time = 10 sec.<br />You have 526 out of 36204146 that take longer than 10 sec. to com...
QUERY CACHEQuery cache is enabledCurrent query_cache_size = 8 MCurrent query_cache_used = 7 MCurrent query_cach_limit = 1 ...
TEMP TABLES<br />Current max_heap_table_size = 16 M<br />Current tmp_table_size = 32 M<br />Of 35170 temp tables, 74% were...
http://mysql-tuner.pl<br />mysql-tuner.pl<br />
-------- Storage Engine Statistics ---------------------<br />[--] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBClus...
-------- Performance Metrics ---------------------------<br />[--] Up for: 16m 37s (6K q [6.059 qps], 146 conn, TX: 54M, R...
-------- Recommendations -------------------------------<br />General recommendations:<br />Add skip-innodb to MySQL confi...
maatkit<br />http://www.maatkit.org/<br />
maatkit<br />mk-error-log<br />mk-log-player<br />mk-index-usage<br />mk-query-advisor<br />mk-query-digest<br />mk-query-...
maatkit: mk-error-log<br />Count Level   Message                                           <br />  ===== ======= =========...
maatkit: mk-log-player<br />mk-log-player does two things: it splits MySQL query logs into session files and it plays (exe...
maatkit: mk-index-usage<br />This tool connects to a MySQL database server, reads through a query log, and uses EXPLAIN to...
maatkit: mk-query-advisor<br />mk-query-advisor examines queries and applies rules to them, trying to find queries that lo...
maatkit: mk-query-digest<br /> #           pct   total    min    max     avg     95%  stddev  median<br /> # Count       0...
maatkit: mk-query-profiler<br />mk-query-profiler reads a file containing one or more SQL statements or shell commands, ex...
http://code.google.com/p/innotop/<br />innotop<br />
 Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
Queries<br />
use ORMs<br />use Indexes<br />be concrete (limit yourself)<br />get a map!<br />Queries<br />
why?<br />use ORMs<br />
experience<br />safety<br />clear code<br />speeding development<br />portability<br />use ORMs<br />
why?<br />use Indexes<br />
CREATE TABLE employee (<br />employee_number char(10) NOT NULL,<br />firstnamevarchar(40),<br />   surname varchar(40),<br...
use Indexes<br />NOT using PRIMARY KEY<br />   Using PRIMARY KEY<br />EXPLAIN SELECT employee_number, firstname, surname F...
use Indexes<br />ALTER TABLE employee ADD INDEX(surname, firstname);<br />SELECT overtime_rate FROM employee<br />WHERE su...
use Indexes<br />ALTER TABLE employee ADD INDEX(surname, firstname);<br />SELECT overtime_rate FROM employee<br />WHERE su...
use Indexesand be concrete<br />select … WHERE year(my_date) > 2010<br />select … where email LIKE “%@gmail.com”<br />sele...
create table `ids` (<br />   `id` int(11) NOT NULL AUTO_INCREMENT,<br />   `id1` int(11) NOT NULL,<br />`id2` int(11) DEFA...
 Engines<br />Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
Questions?<br />
Contacts<br />vcard<br />agnislav @<br />gmail<br />skype<br />twitter<br />facebook<br />vkontakte<br />livejournal<br />
Upcoming SlideShare
Loading in …5
×

Оптимизация MySQL. Что должен знать каждый разработчик

2,578
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,578
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Оптимизация MySQL. Что должен знать каждый разработчик

  1. 1. MySQL:Основыоптимизации<br />или<br />Чтодолжен знать каждыйразработчик<br />
  2. 2. АгниславОнуфрийчук<br />Обо мне<br />
  3. 3. АгниславОнуфрийчук<br />Веб-разработчик<br />Обо мне<br />
  4. 4. АгниславОнуфрийчук<br />Веб-разработчик<br />Люблю девушек<br />Обо мне<br />
  5. 5. АгниславОнуфрийчук<br />Веб-разработчик<br />Люблю девушек<br />Не люблю MS Internet Exporerи Opera<br />Обо мне<br />
  6. 6. Ктоработает с MySQL?<br />О вас<br />
  7. 7. Ктоработает с MySQL?<br />КтоиспользуетMyISAM?<br />О вас<br />
  8. 8. Ктоработает с MySQL?<br />КтоиспользуетMyISAM?<br />Ктоещё не используетInnoDB?<br />О вас<br />
  9. 9. Ктоработает с MySQL?<br />КтоиспользуетMyISAM?<br />Ктоещё не используетInnoDB?<br />Кто не знает про my.ini/my.cnf?<br />О вас<br />
  10. 10. Здесьзнают толк в оптимизацииMySQL<br />О PortaOne<br />
  11. 11. Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />О PortaOne<br />
  12. 12. Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />Здесьзнают толк в программистах<br />О PortaOne<br />
  13. 13. Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />Здесьзнают толк в программистах<br />Здесьзнают толк в after-parties.<br />О PortaOne<br />
  14. 14. Здесьзнают толк в оптимизацииMySQL<br />Здесьзнают толк в девушках<br />Здесьзнают толк в программистах<br />Здесьзнают толк в after-parties.<br />О PortaOne<br />
  15. 15. Начнём?<br />
  16. 16. ОптимизацияMySQL<br />
  17. 17. Всё плохо.<br /> <br />ОптимизацияMySQL<br />
  18. 18. Сегоднямы не поговорим о…<br />
  19. 19. Шардинге<br />Сегоднямы не поговорим о…<br />
  20. 20. Шардинге<br />Железе<br />Сегоднямы не поговорим о…<br />
  21. 21. Шардинге<br />Железе<br />Операционных системах<br />Сегоднямы не поговорим о…<br />
  22. 22. Шардинге<br />Железе<br />Операционных системах<br />Файловых системах<br />Сегоднямы не поговорим о…<br />
  23. 23. Сегоднямыпоговорим о…<br />
  24. 24. Движках (engines)<br />Сегоднямыпоговорим о…<br />
  25. 25. Движках (engines)<br />Базовых настройках<br />Сегоднямыпоговорим о…<br />
  26. 26. Движках (engines)<br />Базовых настройках<br />Полезныхутилитах<br />Сегоднямыпоговорим о…<br />
  27. 27. Движках (engines)<br />Базовых настройках<br />Полезныхутилитах<br />Запросах<br />Сегоднямыпоговорим о…<br />
  28. 28. Движках (engines)<br />Базовых настройках<br />Полезныхутилитах<br />Запросах<br />И о чём-нибудьприятном<br />Сегоднямыпоговорим о…<br />
  29. 29.  Engines<br /> Settings<br /> Utilities<br /> Queries<br /> Girls <br />Roadmap<br />
  30. 30.  Engines<br /> Settings<br /> Utilities<br /> Queries<br /> Girls <br />Roadmap<br />
  31. 31.  Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
  32. 32.  Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
  33. 33. Engines<br />
  34. 34. WTF?<br />Engines<br />
  35. 35. WTF? It’s cool!<br />Engines<br />
  36. 36. InnoDB/XtraDB<br />MyISAM/Maria<br />Memory<br />NDB<br />CSV<br />Blackhole<br />Engines<br />
  37. 37. Extremely fast<br />Not-transactional<br />Table-level locking<br />No BLOB/TEXT data types<br />Engines: Memory<br />
  38. 38. Extremely fast<br />Transactional<br />Row-level locking<br />Good scaling capabilities<br />Engines: NDB<br />
  39. 39. Simple data exchange<br />No table partitioning<br />No NULL values (since 5.1.23)<br />Engines: CSV<br />
  40. 40. Extremely fast (faster then Memory/NDB)<br />Transactional<br />All types of indexes<br />Low-cost storage<br />Engines: Blackhole<br />
  41. 41. Default for years (up to 5.5)<br />Non-Transactional<br />Table-level locking<br />Full-text search indexes<br />Fast read<br />Engines: MyISAM<br />
  42. 42. Transactional<br />Row-level locking<br />Foreign keys<br />Simple performance tuning<br />Engines: InnoDB<br />
  43. 43. All InnoDB feature plus:<br />“Out-of-box” better performance<br />Most powerful performance tuning<br />“Troubleshoot without guesswork”<br />Engines: XtraDB<br />
  44. 44.  Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
  45. 45. There hundreds of them…<br />Settings<br />
  46. 46. There hundreds of them…<br />but a couple of them are enough for us<br />Settings<br />
  47. 47. Using memory is better than using disk<br />The main point is…<br />
  48. 48. query_cache_size<br />Does matter for SELECT-dedicated server<br />32M is generally enough<br />Settings<br />
  49. 49. innodb_buffer_pool_size<br />Give all you can:<br />Servers: 50-75% of available memory<br />Dev PC: 25-50% of available memory<br />Settings<br />
  50. 50. innodb_log_file_size<br />Make your log files big.<br />128M/256M is a good value<br />Settings<br />
  51. 51. innodb_log_buffer_size<br />How often we’ll flush log data to disk<br />4M is a good value unless you’re piping large blobs.<br />Settings<br />
  52. 52. innodb_flush_log_at_trx_commit<br />0 – write log buffer to file and flush it to disk every second<br />1 – write&flush to disk for every transaction<br />2 – write for every transaction and flush every second<br />Settings<br />
  53. 53. innodb_thread_concurrency=8<br />Just use this value<br />Settings<br />
  54. 54. innodb_flush_method=O_DIRECT<br />Avoid double buffering<br />Settings<br />
  55. 55. innodb_file_per_table<br />Use it if you don’t have tons of tables<br />Settings<br />
  56. 56.  Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
  57. 57. tuning-primer.sh<br />mysql-tuner.pl<br />maatkit<br />innotop<br />Utilities<br />
  58. 58. http://www.day32.com/MySQL/<br />tuning-primer.sh<br />
  59. 59. SLOW QUERIES<br />Current long_query_time = 10 sec.<br />You have 526 out of 36204146 that take longer than 10 sec. to complete<br />The slow query log is NOT enabled.<br />Your long_query_time may be too high, I typically set this under 5 sec.<br />tuning-primer.sh<br />
  60. 60. QUERY CACHEQuery cache is enabledCurrent query_cache_size = 8 MCurrent query_cache_used = 7 MCurrent query_cach_limit = 1 MCurrent Query cache fill ratio = 89.38 %However, 254246 queries have been removed from the query cache due to lack of memoryPerhaps you should raise query_cache_sizeMySQL won't cache query results that are larger than query_cache_limit in size <br />tuning-primer.sh<br />
  61. 61. TEMP TABLES<br />Current max_heap_table_size = 16 M<br />Current tmp_table_size = 32 M<br />Of 35170 temp tables, 74% were created on disk<br />Effective in-memory tmp_table_size is limited to max_heap_table_size.<br />Perhaps you should increase your tmp_table_size and/or max_heap_table_size to reduce the number of disk-based temporary tables<br />Note! BLOB and TEXT columns are not allow in memory tables.<br />If you are using these columns raising these values might not impact your ratio of on disk temp tables. <br />tuning-primer.sh<br />
  62. 62. http://mysql-tuner.pl<br />mysql-tuner.pl<br />
  63. 63. -------- Storage Engine Statistics ---------------------<br />[--] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster<br />[--] Data in MyISAM tables: 19M (Tables: 90)<br />[!!] InnoDB is enabled but isn't being used<br />[!!] BDB is enabled but isn't being used<br />[!!] Total fragmented tables: 18<br />mysql-tuner.pl<br />
  64. 64. -------- Performance Metrics ---------------------------<br />[--] Up for: 16m 37s (6K q [6.059 qps], 146 conn, TX: 54M, RX: 665K)<br />[--] Reads / Writes: 62% / 38%<br />[--] Total buffers: 298.0M global + 6.3M per thread (100 max threads)<br />[OK] Maximum possible memory usage: 929.2M (26% of installed RAM)<br />[OK] Slow queries: 0% (0/6K)<br />[OK] Highest usage of available connections: 5% (5/100)<br />[OK] Key buffer size / total MyISAM indexes: 256.0M/2.3M<br />[!!] Key buffer hit rate: 91.3% (1K cached / 101 reads)<br />[OK] Query cache efficiency: 97.6% (5K cached / 5K selects)<br />mysql-tuner.pl<br />
  65. 65. -------- Recommendations -------------------------------<br />General recommendations:<br />Add skip-innodb to MySQL configuration to disable InnoDB<br />Add skip-bdb to MySQL configuration to disable BDB<br />Run OPTIMIZE TABLE to defragment tables for better performance<br />MySQLstarted within last 24 hours - recommendations may be inaccurate<br />Enable the slow query log to troubleshoot bad queries<br />mysql-tuner.pl<br />
  66. 66. maatkit<br />http://www.maatkit.org/<br />
  67. 67. maatkit<br />mk-error-log<br />mk-log-player<br />mk-index-usage<br />mk-query-advisor<br />mk-query-digest<br />mk-query-profiler<br />… (>30)<br />
  68. 68. maatkit: mk-error-log<br />Count Level Message <br /> ===== ======= =======================================<br /> 5 info mysqld started <br /> 4 info mysqld version info <br /> 3 info InnoDB: Started <br /> 2 info mysqld ended <br /> 1 unknown Number of processes running now: 0 <br /> 1 error [ERROR] /usr/sbin/mysqld: unknown variable 'ssl-ke<br /> 1 error [ERROR] Failed to initialize the master info struc<br />
  69. 69. maatkit: mk-log-player<br />mk-log-player does two things: it splits MySQL query logs into session files and it plays (executes) queries in session files on a MySQL server.<br />
  70. 70. maatkit: mk-index-usage<br />This tool connects to a MySQL database server, reads through a query log, and uses EXPLAIN to ask MySQL how it will use each query. When it is finished, it prints out a report on indexes that the queries didn't use.<br />
  71. 71. maatkit: mk-query-advisor<br />mk-query-advisor examines queries and applies rules to them, trying to find queries that look bad according to the rules. It reports on queries that match the rules, so you can find bad practices or hidden problems in your SQL. <br />
  72. 72. maatkit: mk-query-digest<br /> # pct total min max avg 95% stddev median<br /> # Count 0 2<br /> # Exec time 13 1105s 552s 554s 553s 554s 2s 553s<br /> # Lock time 0 216us 99us 117us 108us 117us 12us 108us<br /> # Rows sent 20 6.26M 3.13M 3.13M3.13M3.13M 12.73 3.13M<br /> # Rows exam 0 6.26M 3.13M 3.13M3.13M3.13M 12.73 3.13M<br />…<br /> # Query_time distribution<br /> # 1us<br /> # 10us<br /> # 100us<br /> # 1ms<br /> # 10ms<br /> # 100ms<br /> # 1s<br /> # 10s+ #############################################################<br />
  73. 73. maatkit: mk-query-profiler<br />mk-query-profiler reads a file containing one or more SQL statements or shell commands, executes them, and analyzes the output of SHOW STATUS afterwards. It then prints statistics about how the batch performed. For example, it can show how many table scans the batch caused, how many page reads, how many temporary tables, and so forth.<br />
  74. 74. http://code.google.com/p/innotop/<br />innotop<br />
  75. 75.  Engines<br /> Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
  76. 76. Queries<br />
  77. 77. use ORMs<br />use Indexes<br />be concrete (limit yourself)<br />get a map!<br />Queries<br />
  78. 78. why?<br />use ORMs<br />
  79. 79. experience<br />safety<br />clear code<br />speeding development<br />portability<br />use ORMs<br />
  80. 80. why?<br />use Indexes<br />
  81. 81. CREATE TABLE employee (<br />employee_number char(10) NOT NULL,<br />firstnamevarchar(40),<br /> surname varchar(40),<br /> address text,<br />tel_novarchar(25),<br /> salary int(11),<br />overtime_rateint(10) NOT NULL<br />);<br />use Indexes<br />
  82. 82. use Indexes<br />NOT using PRIMARY KEY<br /> Using PRIMARY KEY<br />EXPLAIN SELECT employee_number, firstname, surname FROM employee WHERE id=1000G<br /> id: 1<br />select_type: SIMPLE<br /> table: employee<br /> type: const<br />possible_keys: PRIMARY<br /> key: PRIMARY<br />key_len: 4<br /> ref: const<br /> rows: 1<br /> Extra:<br /> id: 1<br />select_type: SIMPLE<br /> table: employee<br /> type: ALL<br />possible_keys: NULL<br /> key: NULL<br />key_len: NULL<br /> ref: NULL<br /> rows: 10000<br /> Extra: Using where<br />
  83. 83. use Indexes<br />ALTER TABLE employee ADD INDEX(surname, firstname);<br />SELECT overtime_rate FROM employee<br />WHERE surname='Madida';<br />SELECT overtime_rate FROM employee <br />WHERE firstname='Mpho';<br />SELECT overtime_rate FROM employee <br />WHERE surname='Madida' and firstname="Mpho";<br />SELECT overtime_rate FROM employee <br />WHERE firstname="Mpho" and surname='Madida';<br />
  84. 84. use Indexes<br />ALTER TABLE employee ADD INDEX(surname, firstname);<br />SELECT overtime_rate FROM employee<br />WHERE surname='Madida';<br />SELECT overtime_rate FROM employee <br />WHERE firstname='Mpho';<br />SELECT overtime_rate FROM employee <br />WHERE surname='Madida' and firstname="Mpho";<br />SELECT overtime_rate FROM employee <br />WHERE firstname="Mpho" and surname='Madida';<br />
  85. 85. use Indexesand be concrete<br />select … WHERE year(my_date) > 2010<br />select … where email LIKE “%@gmail.com”<br />select * from table;<br />select * from table limit 10000;<br />select col1 from table where id > 0;<br />insert into table values(‘1’, ‘bla’);<br />
  86. 86. create table `ids` (<br /> `id` int(11) NOT NULL AUTO_INCREMENT,<br /> `id1` int(11) NOT NULL,<br />`id2` int(11) DEFAULT NULL,<br /> …,<br /> PRIMARY KEY (`id`)<br />) ENGINE=InnoDB;<br />SELECT COUNT(*) FROM `ids`;<br />SELECT COUNT(`id`) FROM `ids`;<br />SELECT COUNT(`id1`) FROM `ids`;<br />SELECT COUNT(`id2`) FROM `ids`;<br />get a map!<br />
  87. 87.  Engines<br />Settings<br /> Utilities<br /> Queries<br />Roadmap<br />
  88. 88. Questions?<br />
  89. 89. Contacts<br />vcard<br />agnislav @<br />gmail<br />skype<br />twitter<br />facebook<br />vkontakte<br />livejournal<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×