เมื่อคุณได้รับเงินรางวัลฉันจะแบ่งปันความลับที่ยากจะชนะของฉัน ...
โดยทั่วไปแล้ว SQL ทั้งหมดที่ฉันปรับแต่งในวันนี้จำเป็นต้องใช้การสืบค้นย่อย มาจากโลกฐานข้อมูล Oracle สิ่งที่ฉันยอมรับไม่ได้ทำงานเหมือนกันกับ MySQL และการอ่านของฉันเกี่ยวกับการปรับแต่ง MySQL ทำให้ฉันสรุปได้ว่า MySQL อยู่เบื้องหลัง Oracle ในแง่ของการเพิ่มประสิทธิภาพการสืบค้น
ในขณะที่คำค้นหาง่ายๆที่จำเป็นสำหรับแอปพลิเคชัน B2C ส่วนใหญ่อาจทำงานได้ดีสำหรับ MySQL แต่ประเภทการรายงานรวมส่วนใหญ่ที่จำเป็นสำหรับการรายงานข่าวกรองดูเหมือนว่าจะต้องมีการวางแผนเล็กน้อยและจัดระเบียบแบบสอบถาม SQL ใหม่เพื่อเป็นแนวทางให้ MySQL ดำเนินการได้เร็วขึ้น
การบริหาร:
max_connections
คือจำนวนการเชื่อมต่อพร้อมกัน ค่าเริ่มต้นคือ 100 การเชื่อมต่อ (151 ตั้งแต่ 5.0) - น้อยมาก
บันทึก:
การเชื่อมต่อใช้หน่วยความจำและระบบปฏิบัติการของคุณอาจไม่สามารถรองรับการเชื่อมต่อได้มากนัก
MySQL ไบนารีสำหรับ Linux / x86 ช่วยให้คุณมีการเชื่อมต่อพร้อมกันได้มากถึง 4096 รายการ แต่ไบนารีที่คอมไพล์ด้วยตนเองมักมีขีด จำกัด น้อยกว่า
ตั้งค่า table_cache ให้ตรงกับจำนวนตารางที่เปิดอยู่และการเชื่อมต่อพร้อมกัน ดูค่า open_tables และหากมีการเติบโตอย่างรวดเร็วคุณจะต้องเพิ่มขนาด
บันทึก:
2 พารามิเตอร์ก่อนหน้านี้อาจต้องใช้ไฟล์ที่เปิดอยู่จำนวนมาก 20 + max_connections + table_cache * 2 เป็นค่าประมาณที่ดีสำหรับสิ่งที่คุณต้องการ MySQL บน Linux มีตัวเลือก open_file_limit ตั้งค่าขีด จำกัด นี้
หากคุณมีคำค้นหาที่ซับซ้อน sort_buffer_size และ tmp_table_size น่าจะสำคัญมาก ค่าจะขึ้นอยู่กับความซับซ้อนของการสืบค้นและทรัพยากรที่มีอยู่ แต่แนะนำให้ใช้ 4Mb และ 32Mb ตามลำดับ
หมายเหตุ: ค่าเหล่านี้เป็นค่า "ต่อการเชื่อมต่อ" ในบรรดา read_buffer_size, read_rnd_buffer_size และอื่น ๆ ซึ่งหมายความว่าค่านี้อาจจำเป็นสำหรับการเชื่อมต่อแต่ละครั้ง ดังนั้นให้พิจารณาภาระและทรัพยากรที่มีเมื่อตั้งค่าพารามิเตอร์เหล่านี้ ตัวอย่างเช่น sort_buffer_size จะถูกจัดสรรก็ต่อเมื่อ MySQL ต้องการจัดเรียง หมายเหตุ: ระวังอย่าให้หน่วยความจำหมด
หากคุณมีการเชื่อมต่อหลายรายการ (เช่นเว็บไซต์ที่ไม่มีการเชื่อมต่อแบบถาวร) คุณอาจปรับปรุงประสิทธิภาพโดยการตั้งค่า thread_cache_size เป็นค่าที่ไม่ใช่ศูนย์ 16 เป็นค่าเริ่มต้นที่ดี เพิ่มค่าจนกว่า threads_created ของคุณจะไม่เติบโตอย่างรวดเร็ว
คีย์หลัก:
สามารถมีคอลัมน์ AUTO_INCREMENT ได้เพียงคอลัมน์เดียวต่อตารางต้องจัดทำดัชนีและต้องไม่มีค่าเริ่มต้น
โดยปกติ KEY เป็นคำพ้องความหมายของ INDEX นอกจากนี้ยังสามารถระบุคีย์แอตทริบิวต์ PRIMARY KEY เป็นเพียง KEY เมื่อกำหนดในนิยามคอลัมน์ สิ่งนี้ถูกนำไปใช้เพื่อความเข้ากันได้กับระบบฐานข้อมูลอื่น
คีย์หลักเป็นดัชนีเฉพาะที่ต้องกำหนดคอลัมน์หลักทั้งหมดให้เป็นค่าว่าง
ถ้า PRIMARY KEY หรือดัชนี UNIQUE ประกอบด้วยคอลัมน์เดียวที่มีประเภทจำนวนเต็มคุณยังสามารถอ้างถึงคอลัมน์เป็น "_rowid" ในคำสั่ง SELECT
ใน MySQL ชื่อของ PRIMARY KEY คือ PRIMARY
ปัจจุบันตาราง InnoDB (v5.1?) เท่านั้นที่รองรับคีย์ต่างประเทศ
โดยปกติคุณจะสร้างดัชนีทั้งหมดที่คุณต้องการเมื่อคุณสร้างตาราง คอลัมน์ใด ๆ ที่ประกาศเป็น PRIMARY KEY, KEY, UNIQUE หรือ INDEX จะถูกจัดทำดัชนี
NULL หมายถึง "ไม่มีค่า" ในการทดสอบค่า NULL คุณไม่สามารถใช้ตัวดำเนินการเปรียบเทียบเลขคณิตเช่น =, <, หรือ <> ใช้ตัวดำเนินการ IS NULL และไม่ใช่ NULL แทน:
NO_AUTO_VALUE_ON_ZERO ระงับการเพิ่มอัตโนมัติสำหรับ 0 ดังนั้นเฉพาะ NULL เท่านั้นที่สร้างหมายเลขลำดับถัดไป โหมดนี้จะมีประโยชน์หากเก็บ 0 ไว้ในคอลัมน์ AUTO_INCREMENT ของตาราง (การเก็บ 0 ไม่ใช่วิธีปฏิบัติที่แนะนำ แต่อย่างใด)
ในการเปลี่ยนค่าของตัวนับ AUTO_INCREMENT ที่จะใช้สำหรับแถวใหม่:
ALTER TABLE mytable AUTO_INCREMENT = value;
หรือ SET INSERT_ID = ค่า;
เว้นแต่จะระบุไว้เป็นอย่างอื่นค่าจะเริ่มต้นด้วย: 1000000 หรือระบุดังนี้:
... ) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 1
TIMESTAMPS:
ค่าสำหรับคอลัมน์ TIMESTAMP จะถูกแปลงจากเขตเวลาปัจจุบันเป็น UTC สำหรับการจัดเก็บและจาก UTC เป็นเขตเวลาปัจจุบันสำหรับการดึงข้อมูล
http://dev.mysql.com/doc/refman/5.1/en/timestamp.html
สำหรับคอลัมน์ TIMESTAMP หนึ่งคอลัมน์ในตารางคุณสามารถกำหนดการประทับเวลาปัจจุบันเป็นค่าเริ่มต้นและค่าการอัปเดตอัตโนมัติ
สิ่งหนึ่งที่ต้องระวังเมื่อใช้หนึ่งในประเภทเหล่านี้ใน WHERE clause ที่ดีที่สุดคือทำ WHERE datecolumn = FROM_UNIXTIME (1057941242) ไม่ใช่ WHERE UNIX_TIMESTAMP (datecolumn) = 1057941242 การทำอย่างหลังจะไม่ใช้ประโยชน์จากดัชนี ในคอลัมน์นั้น
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
UNIX_TIMESTAMP()
FROM_UNIXTIME()
UTC_DATE()
UTC_TIME()
UTC_TIMESTAMP()
ถ้าคุณแปลง datetime เป็น unix timestamp ใน MySQL:
จากนั้นเพิ่ม 24 ชั่วโมงเข้าไป:
จากนั้นแปลงกลับเป็นวันที่และเวลาจะเสียเวลาไปหนึ่งชั่วโมงอย่างน่าอัศจรรย์!
นี่คือสิ่งที่เกิดขึ้น เมื่อแปลงการประทับเวลาของยูนิกซ์กลับเป็นวันที่และเวลาจะมีการพิจารณาเขตเวลาและมันก็เกิดขึ้นระหว่างวันที่ 28 ถึงวันที่ 29 ตุลาคม 2549 เราได้หยุดเวลาออมแสงและหายไปหนึ่งชั่วโมง
เริ่มต้นด้วย MySQL 4.1.3 ฟังก์ชัน CURRENT_TIMESTAMP (), CURRENT_TIME (), CURRENT_DATE () และ FROM_UNIXTIME () จะส่งคืนค่าในเขตเวลาปัจจุบันของการเชื่อมต่อซึ่งพร้อมใช้งานเป็นค่าของตัวแปรระบบ time_zone นอกจากนี้ UNIX_TIMESTAMP () ยังถือว่าอาร์กิวเมนต์เป็นค่าวันที่และเวลาในเขตเวลาปัจจุบัน
การตั้งค่าเขตเวลาปัจจุบันไม่มีผลกับค่าที่แสดงโดยฟังก์ชันเช่น UTC_TIMESTAMP () หรือค่าในคอลัมน์ DATE, TIME หรือ DATETIME
หมายเหตุ: ในการอัปเดตเท่านั้นอัปเดต DateTime หากฟิลด์มีการเปลี่ยนแปลงหากการอัปเดตส่งผลให้ไม่มีการเปลี่ยนแปลงฟิลด์ DateTime จะไม่อัปเดต!
นอกจากนี้ TIMESTAMP แรกคือ AUTOUPDATE ตามค่าเริ่มต้นเสมอแม้ว่าจะไม่ได้ระบุไว้ก็ตาม
เมื่อทำงานกับ Dates ฉันมักจะคิดว่า Julian Date เพราะคณิตศาสตร์ข้อมูลเป็นเรื่องง่ายๆในการเพิ่มหรือลบจำนวนเต็มและวินาทีนับตั้งแต่เที่ยงคืนด้วยเหตุผลเดียวกัน เป็นเรื่องยากที่ฉันต้องการเวลาในการปรับสภาพให้ละเอียดกว่าวินาที
ทั้งสองนี้สามารถจัดเก็บเป็นจำนวนเต็ม 4 ไบต์และถ้าพื้นที่แน่นมากสามารถรวมเป็นเวลา UNIX (วินาทีนับตั้งแต่ยุค 1/1/1970) เป็นจำนวนเต็มที่ไม่ได้ลงนามซึ่งจะใช้ได้ดีจนถึงประมาณ 2106 เป็น:
'วินาทีใน 24 ชั่วโมง = 86400
'Signed Integer max val = 2,147,483,647 - สามารถถือได้ 68 ปีวินาที
'Unsigned Integer max val = 4,294,967,295 - สามารถเก็บได้ 136 ปีวินาที
ไบนารีโปรโตคอล:
MySQL 4.1 เปิดตัวโปรโตคอลไบนารีที่อนุญาตให้ส่งและส่งคืนค่าข้อมูลที่ไม่ใช่สตริงในรูปแบบดั้งเดิมโดยไม่ต้องแปลงเป็นและจากรูปแบบสตริง (มีประโยชน์มาก)
นอกจากนี้ mysql_real_query () เร็วกว่า mysql_query () เนื่องจากไม่เรียกใช้ strlen () เพื่อดำเนินการกับสตริงคำสั่ง
http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html
โปรโตคอลไบนารีสนับสนุนคำสั่งที่เตรียมไว้ทางฝั่งเซิร์ฟเวอร์และอนุญาตให้ส่งค่าข้อมูลในรูปแบบดั้งเดิม โปรโตคอลไบนารีได้รับการแก้ไขเล็กน้อยในช่วงก่อนหน้านี้ของ MySQL 4.1
คุณสามารถใช้มาโคร IS_NUM () เพื่อทดสอบว่าเขตข้อมูลมีประเภทตัวเลขหรือไม่ ส่งผ่านค่าประเภทเป็น IS_NUM () และประเมินเป็น TRUE หากฟิลด์เป็นตัวเลข:
สิ่งหนึ่งที่ควรทราบก็คือข้อมูลไบนารีสามารถส่งภายในแบบสอบถามปกติได้หากคุณหลีกเลี่ยงมันและจำไว้ว่า MySQL ต้องการเพียงเครื่องหมายแบ็กสแลชนั้นและอักขระเครื่องหมายคำพูดเท่านั้นที่จะหลีกเลี่ยงได้ นั่นเป็นวิธีที่ง่ายมากในการแทรกสตริงไบนารีที่สั้นกว่าเช่นรหัสผ่านที่เข้ารหัส / เกลือ
เซิร์ฟเวอร์หลัก:
http://www.experts-exchange.com/Database/MySQL/Q_22967482.html
http://www.databasejournal.com/features/mysql/article.php/10897_3355201_2
GRANT จำลองแบบทาส เป็น slave_user ระบุโดย 'slave_password'
#Master Binary Logging Config STATEMENT causes replication
to be statement-based - default
log-bin=Mike
binlog-format=STATEMENT
server-id=1
max_binlog_size = 10M
expire_logs_days = 120
#Slave Config
master-host=master-hostname
master-user=slave-user
master-password=slave-password
server-id=2
ไฟล์บันทึกไบนารีต้องอ่าน:
http://dev.mysql.com/doc/refman/5.0/th/binary-log.html
http://www.mydigitallife.info/2007/10/06/how-to-read-mysql-binary-log-files-binlog-with-mysqlbinlog/
http://dev.mysql.com/doc/refman/5.1/en/mysqlbinlog.html
http://dev.mysql.com/doc/refman/5.0/th/binary-log.html
http://dev.mysql.com/doc/refman/5.1/en/binary-log-setting.html
คุณสามารถลบไฟล์บันทึกไบนารีทั้งหมดด้วยคำสั่ง RESET MASTER หรือส่วนย่อยของไฟล์เหล่านั้นด้วย PURGE MASTER
--result-file = binlog.txt TrustedFriend-bin.000030
นอร์มัลไลเซชัน:
http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html
ฟังก์ชัน UDF
http://www.koders.com/cpp/fid10666379322B54AD41AEB0E4100D87C8CDDF1D8C.aspx
http://souptonuts.sourceforge.net/readme_mysql.htm
ประเภทข้อมูล:
http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html
http://www.informit.com/articles/article.aspx?p=1238838&seqNum=2
http://bitfilm.net/2008/03/24/saving-bytes-efficient-data-storage-mysql-part-1/
สิ่งหนึ่งที่ควรทราบคือบนโต๊ะผสมที่มีทั้ง CHAR และ VARCHAR mySQL จะเปลี่ยน CHAR เป็นของ VARCHAR
RecNum integer_type UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (RecNum)
MySQL แสดงวันที่กับปีแรกเสมอตามข้อกำหนดมาตรฐานของ SQL และ ISO 8601
อื่น ๆ:
การปิดฟังก์ชัน MySQl บางอย่างจะส่งผลให้ไฟล์ข้อมูลมีขนาดเล็กลงและเข้าถึงได้เร็วขึ้น ตัวอย่างเช่น:
--datadir จะระบุไดเร็กทอรีข้อมูลและ
--skip-innodb จะปิดตัวเลือก inno และช่วยคุณประหยัด 10-20M
เพิ่มเติมที่นี่
http://dev.mysql.com/tech-resources/articles/mysql-c-api.html
ดาวน์โหลดบทที่ 7 - ฟรี
InnoDB เป็นธุรกรรม แต่มีค่าใช้จ่ายด้านประสิทธิภาพที่มาพร้อมกับมัน ฉันพบว่าตาราง MyISAM เพียงพอสำหรับ 90% ของโครงการของฉัน ตารางที่ไม่ปลอดภัยในการทำธุรกรรม (MyISAM) มีข้อดีหลายประการซึ่งทั้งหมดนี้เกิดขึ้นเนื่องจาก:
ไม่มีค่าใช้จ่ายในการทำธุรกรรม:
เร็วขึ้นมาก
ความต้องการพื้นที่ดิสก์ลดลง
ต้องใช้หน่วยความจำน้อยลงในการอัปเดต
ตาราง MyISAM แต่ละตารางจะถูกเก็บไว้ในดิสก์ในสามไฟล์ ไฟล์มีชื่อที่ขึ้นต้นด้วยชื่อตารางและมีนามสกุลเพื่อระบุประเภทไฟล์ ไฟล์. frm เก็บรูปแบบตาราง ไฟล์ข้อมูลมีนามสกุล. MYD (MYData) ไฟล์ดัชนีมีนามสกุล. MYI (MYIndex)
ไฟล์เหล่านี้สามารถคัดลอกไปยังที่เก็บข้อมูลเหมือนเดิมโดยไม่ต้องใช้คุณสมบัติการสำรองข้อมูลของผู้ดูแลระบบ MySQL ซึ่งใช้เวลานาน (การคืนค่าก็เช่นกัน)
เคล็ดลับคือทำสำเนาไฟล์เหล่านี้แล้ววางตาราง เมื่อคุณใส่ไฟล์กลับ MySQl จะจดจำและอัปเดตการติดตามตาราง
หากคุณต้องสำรอง / กู้คืน
การกู้คืนข้อมูลสำรองหรือการนำเข้าจากไฟล์ดัมพ์ที่มีอยู่อาจใช้เวลานานขึ้นอยู่กับจำนวนดัชนีและคีย์หลักที่คุณมีในแต่ละตาราง คุณสามารถเร่งกระบวนการนี้ได้อย่างรวดเร็วโดยการแก้ไขไฟล์ดัมพ์ต้นฉบับของคุณโดยล้อมรอบด้วยสิ่งต่อไปนี้:
SET AUTOCOMMIT = 0;
SET FOREIGN_KEY_CHECKS=0;
.. your dump file ..
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
SET AUTOCOMMIT = 1;
หากต้องการเพิ่มความเร็วในการโหลดซ้ำให้เพิ่มคำสั่ง SQL SET AUTOCOMMIT = 0; ที่จุดเริ่มต้นของไฟล์ดัมพ์และเพิ่ม COMMIT คำสั่งไปยังจุดสิ้นสุด
โดยค่าเริ่มต้น autocommit จะเปิดอยู่ซึ่งหมายความว่าคำสั่งแทรกแต่ละคำสั่งในไฟล์ดัมพ์จะถือว่าเป็นธุรกรรมแยกกันและเขียนลงดิสก์ก่อนที่จะเริ่มต้นรายการถัดไป หากคุณไม่เพิ่มคำสั่งเหล่านี้การโหลดฐานข้อมูลขนาดใหญ่เข้าไปใน InnoDB อาจใช้เวลาหลายชั่วโมง ...
ขนาดสูงสุดของแถวในตาราง MySQL คือ 65,535 ไบต์
ความยาวสูงสุดที่มีประสิทธิภาพของ VARCHAR ใน MySQL 5.0.3 และบน = ขนาดแถวสูงสุด (65,535 ไบต์)
ค่า VARCHAR จะไม่ถูกเพิ่มเมื่อมีการจัดเก็บ ช่องว่างต่อท้ายจะถูกเก็บไว้เมื่อมีการจัดเก็บและเรียกคืนค่าโดยสอดคล้องกับ SQL มาตรฐาน
ค่า CHAR และ VARCHAR ใน MySQL จะถูกเปรียบเทียบโดยไม่คำนึงถึงช่องว่างต่อท้าย
การใช้ CHAR จะทำให้การเข้าถึงของคุณเร็วขึ้นก็ต่อเมื่อบันทึกทั้งหมดมีขนาดคงที่ นั่นคือถ้าคุณใช้ออบเจ็กต์ขนาดตัวแปรใด ๆ คุณอาจสร้างขนาดตัวแปรทั้งหมดได้เช่นกัน คุณไม่ได้รับความเร็วโดยใช้ CHAR ในตารางที่มี VARCHAR ด้วย
ขีด จำกัด VARCHAR ที่ 255 อักขระถูกเพิ่มขึ้นเป็น 65535 อักขระจาก MySQL 5.0.3
รองรับการค้นหาข้อความแบบเต็มสำหรับตาราง MyISAM เท่านั้น
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
คอลัมน์ BLOB ไม่มีชุดอักขระและการเรียงลำดับและการเปรียบเทียบจะขึ้นอยู่กับค่าตัวเลขของไบต์ในค่าคอลัมน์
หากไม่ได้เปิดใช้งานโหมด SQL ที่เข้มงวดและคุณกำหนดค่าให้กับคอลัมน์ BLOB หรือ TEXT ที่เกินความยาวสูงสุดของคอลัมน์ค่าจะถูกตัดให้พอดีและมีการสร้างคำเตือน
คำสั่งที่เป็นประโยชน์:
ตรวจสอบโหมดที่เข้มงวด: SELECT @@ global.sql_mode;
ปิดโหมดเข้มงวด:
SET @@ global.sql_mode = '';
SET @@ global.sql_mode = 'MYSQL40'
หรือลบ: sql-mode = "STRICT_TRANS_TABLES, ...
แสดงคอลัมน์จาก mytable
เลือกสูงสุด (จำนวนชื่อ) virtualcolumn
จาก mytable ORDER BY virtualcolumn
http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-fields.html
http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id
last_insert_id ()
ทำให้คุณได้รับ PK ของแถวสุดท้ายที่แทรกในเธรดปัจจุบันสูงสุด (pkcolname) ทำให้คุณได้รับ PK ล่าสุดโดยรวม
หมายเหตุ: ถ้าตารางว่างเปล่า max (pkcolname) จะส่งคืน 1 mysql_insert_id () จะแปลงประเภทการส่งคืนของฟังก์ชัน MySQL C API ดั้งเดิม mysql_insert_id () เป็นประเภท long (ชื่อ int ใน PHP)
ถ้าคอลัมน์ AUTO_INCREMENT ของคุณมีประเภทคอลัมน์เป็น BIGINT ค่าที่ส่งคืนโดย mysql_insert_id () จะไม่ถูกต้อง ให้ใช้ฟังก์ชัน MySQL SQL ภายใน LAST_INSERT_ID () ในแบบสอบถาม SQL แทน
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
โปรดทราบว่าเมื่อคุณพยายามแทรกข้อมูลลงในตารางและคุณได้รับข้อผิดพลาด:
Unknown column ‘the first bit of data what you want to put into the table‘ in ‘field list’
โดยใช้สิ่งที่ชอบ
INSERT INTO table (this, that) VALUES ($this, $that)
เป็นเพราะคุณไม่มีเครื่องหมายอะพอสทรอฟีรอบค่าที่คุณพยายามจะยึดติดในตาราง ดังนั้นคุณควรเปลี่ยนรหัสของคุณเป็น:
INSERT INTO table (this, that) VALUES ('$this', '$that')
เตือนว่า `` ใช้เพื่อกำหนดฟิลด์ MySQL ฐานข้อมูลหรือตารางไม่ใช่ค่า;)
ขาดการเชื่อมต่อกับเซิร์ฟเวอร์ระหว่างการสืบค้น:
http://dev.mysql.com/doc/refman/5.1/en/gone-away.html
http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html
http://dev.mysql.com/doc/refman/5.1/en/show-variables.html
http://dev.mysql.com/doc/refman/5.1/en/option-files.html
http://dev.mysql.com/doc/refman/5.1/en/error-log.html
การปรับแต่งแบบสอบถาม
http://www.artfulsoftware.com/infotree/queries.php?&bw=1313
นั่นน่าจะเพียงพอสำหรับการรับโบนัสที่ฉันคิดว่า ... ผลของเวลาหลายชั่วโมงและหลายโครงการพร้อมฐานข้อมูลฟรีที่ยอดเยี่ยม ฉันพัฒนาเซิร์ฟเวอร์ข้อมูลแอปพลิเคชันบนแพลตฟอร์ม windows ส่วนใหญ่ใช้ MySQL สิ่งที่แย่ที่สุดที่ฉันต้องทำให้ตรงคือ
สุดยอดฐานข้อมูล MySQL ฝันร้าย
สิ่งนี้จำเป็นต้องมีชุดแอปพลิเคชันเพื่อประมวลผลตารางให้เป็นสิ่งที่มีประโยชน์โดยใช้เทคนิคต่างๆที่กล่าวถึงที่นี่
หากคุณพบว่าสิ่งนี้ช่วยได้มากแสดงความขอบคุณด้วยการโหวต
ตรวจสอบบทความและเอกสารไวท์เปเปอร์อื่น ๆ ของฉันได้ที่ www.coastrd.com